Skip to content
Snippets Groups Projects
Select Git revision
  • dcfc0eda6cdb5e6b80be4b1d98aacb1a62d465cf
  • main default protected
  • Kelvinrr-patch-5
  • Kelvinrr-patch-4
  • Kelvinrr-patch-3
  • update_release_doc
  • Kelvinrr-patch-2
  • Kelvinrr-patch-1
  • spice_docs
  • ale_testing
  • changelog_docs
  • 1.0.1
  • 1.0.0
13 results

general-utility-with-fx.md

Blame
  • PacketDataField.cpp 3.19 KiB
    #include "PacketDataField.h"
    
    using namespace PacketLib;
    
    //##ModelId=3DA3E5A4033E
    PacketDataField::PacketDataField() : PartOfPacket("Packet Data Field")
    {
        dataFieldHeader = (DataFieldHeader*) new DataFieldHeader();
        tail = new PartOfPacket();
        sourceDataField = 0;
    };
    
    //##ModelId=3DA3E5A4037A
    PacketDataField::~PacketDataField()
    {
        delete dataFieldHeader;
        delete sourceDataField;
        delete tail;
    }
    
    
    //##ModelId=3DA3E5A500D2
    dword PacketDataField::getDimension()
    {
        if(sourceDataField != 0)
            return dataFieldHeader->getDimension() + sourceDataField->getDimension() + tail->getDimension();
        else
            return dataFieldHeader->getDimension() + tail->getDimension();
    }
    
    
    //##ModelId=3DA3E5A5010E
    dword PacketDataField::getMaxDimension()
    {
        if(sourceDataField != 0)
            return dataFieldHeader->getDimension() + sourceDataField->getMaxDimension() + tail->getDimension();
        else
            return dataFieldHeader->getDimension() + tail->getDimension();
    }
    
    
    //##ModelId=3DA3E5A403AC
    word PacketDataField::getNumberOfRealDataBlock()
    {
        //nel caso del packet block, deve essere presente un campo in cui �indicato
        //il numero di blocchi presenti, solo se numero di blocchi fissi = false
        if(sourceDataField->isBlock())
        {
            if(!sourceDataField->isNumberOfBlockFixed())
            {
                word index = (sourceDataField)->getIndexOfNBlock();
                Field* f = dataFieldHeader->getFields(index);
                return (word) f->value + sourceDataField->getSubFromNBlock();
            }
            else
            {
                //se numero di blocchi fissi �true, allora si prende il max
                return sourceDataField->getMaxNumberOfBlock();
            }
        }
    
        return (word) 0;
    }
    
    
    //##ModelId=3DA3E5A50000
    void PacketDataField::setNumberOfRealDataBlock(word number)
    {
        if(number > sourceDataField->getMaxNumberOfBlock())
            number =  sourceDataField->getMaxNumberOfBlock();
        if(sourceDataField->isBlock())
        {
            //sourceDataField->getDimension();
            word index = sourceDataField->getIndexOfNBlock();
            //word index = dataFieldHeader->getIndexOfNBlock();
            Field* f = dataFieldHeader->getFields(index);
            f->value = number - sourceDataField->getSubFromNBlock();
            sourceDataField->setNumberOfRealDataBlock(number);
        }
    }
    
    
    //##ModelId=3DA3E5A5017C
    bool PacketDataField::setOutputStream(ByteStream* os, word first)
    {
        delete outputstream;
        outputstream = 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;
    }
    
    
    //##ModelId=3DA3E5A60028
    ByteStream* PacketDataField::generateStream(bool bigendian)
    {
        dataFieldHeader->generateStream(bigendian);
        sourceDataField->generateStream(bigendian);
        tail->generateStream(bigendian);
        return outputstream;
    }