objectDataIStream.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "objectDeltaDataIStream.h"
00019
00020 #include "command.h"
00021 #include "commands.h"
00022
00023 #include <eq/base/idPool.h>
00024
00025 using namespace std;
00026
00027 namespace eq
00028 {
00029 namespace net
00030 {
00031 ObjectDataIStream::ObjectDataIStream()
00032 : _lastCommand( 0 )
00033 , _version( Object::VERSION_INVALID )
00034 {
00035 }
00036
00037 ObjectDataIStream::~ObjectDataIStream()
00038 {
00039 reset();
00040 }
00041
00042 void ObjectDataIStream::reset()
00043 {
00044 DataIStream::reset();
00045
00046 if( _lastCommand )
00047 _lastCommand->release();
00048 _lastCommand = 0;
00049
00050 while( !_commands.empty( ))
00051 {
00052 _commands.front()->release();
00053 _commands.pop_front();
00054 }
00055
00056 _version = Object::VERSION_INVALID;
00057 }
00058
00059 void ObjectDataIStream::addDataPacket( Command& command )
00060 {
00061 command.retain();
00062 _commands.push_back( &command );
00063 }
00064
00065 const Command* ObjectDataIStream::getNextCommand()
00066 {
00067 if( _lastCommand )
00068 _lastCommand->release();
00069 _lastCommand = 0;
00070
00071 if( _commands.empty( ))
00072 return 0;
00073
00074 _lastCommand = _commands.front();
00075 _commands.pop_front();
00076 return _lastCommand;
00077 }
00078 }
00079 }