// Copyright (C) 1999 Jean-Marc Valin

#include "BufferedNode.h"
#include "ObjectRef.h"
#include "Stream.h"

using namespace std;

namespace FD {

class ReadInt;
DECLARE_NODE(ReadInt)
/*Node
 *
 * @name ReadInt
 * @category IO
 * @description ReadInt an integer from file
 *
 * @input_name STREAM
 * @input_description The stream we are loading from
 * @input_type Stream
 *
 * @output_name OUTPUT
 * @output_type int
 * @output_description The (next) integer in the stream
 *
END*/


class ReadInt : public BufferedNode {

protected:
   
   /**The ID of the 'output' output*/
   int outputID;

   /**The ID of the 'stream' input*/
   int streamInputID;

public:
   ReadInt(string nodeName, ParameterSet params) 
      : BufferedNode(nodeName, params)
   {
      outputID = addOutput("OUTPUT");
      streamInputID = addInput("STREAM");
      inOrder = true;
   }



   void calculate(int output_id, int count, Buffer &out)
   {
      ObjectRef streamRef = getInput(streamInputID,count);
      IStream &stream = object_cast<IStream> (streamRef);

      int i;
      stream >> i;
      out[count] = Int::alloc(i);

      if (stream.eof())
      {
	 //FIXME: Should have an EOF output too
	 //cerr << "end!\n";
	 out[count] =  nilObject;
      }         
   }

};

}//namespace FD


syntax highlighted by Code2HTML, v. 0.9.1