Select Git revision
PacketDataField.cpp 2.75 KiB
/***************************************************************************
PacketDataField.cpp - description
-------------------
begin : Thu Nov 29 2001
copyright : (C) 2001, 2013 by Andrea Bulgarelli
email : bulgarelli@iasfbo.inaf.it
***************************************************************************/
/***************************************************************************
* *
* This program is free software for non commercial purpose *
* and for public research institutes; you can redistribute it and/or *
* modify it under the terms of the GNU General Public License. *
* For commercial purpose see appropriate license terms *
* *
***************************************************************************/
#include "PacketDataField.h"
using namespace PacketLib;
PacketDataField::PacketDataField() : PartOfPacket("Packet Data Field")
{
dataFieldHeader = (DataFieldHeader*) new DataFieldHeader();
tail = new PartOfPacket();
sourceDataField = 0;
};
PacketDataField::~PacketDataField()
{
delete dataFieldHeader;
delete sourceDataField;
delete tail;
}
dword PacketDataField::getDimension()
{
if(sourceDataField != 0)
return dataFieldHeader->getDimension() + sourceDataField->getDimension() + tail->getDimension();
else
return dataFieldHeader->getDimension() + tail->getDimension();
}
dword PacketDataField::getMaxDimension()
{
if(sourceDataField != 0)
return dataFieldHeader->getDimension() + sourceDataField->getMaxDimension() + tail->getDimension();
else
return dataFieldHeader->getDimension() + tail->getDimension();
}
bool PacketDataField::setOutputStream(ByteStreamPtr os, word first)
{
outputstream = ByteStreamPtr(new ByteStream((os->stream + first), getDimension(), os->isBigendian()));
dataFieldHeader->setOutputStream(os, first);
word sdfstart = first + dataFieldHeader->getDimension();
sourceDataField->setOutputStream(os, sdfstart);
word tailstart = sdfstart;
if(sourceDataField != 0)
tailstart += sourceDataField->getDimension();
if(tail->getDimension() != 0)
tail->setOutputStream(os, tailstart);
return true;
}
ByteStreamPtr PacketDataField::generateStream(bool bigendian)
{
dataFieldHeader->generateStream(bigendian);
sourceDataField->generateStream(bigendian);
tail->generateStream(bigendian);
return outputstream;
}