IBR-DTNSuite  0.8
ibrdtn/ibrdtn/data/StreamBlock.cpp
Go to the documentation of this file.
00001 /*
00002  * StreamBlock.cpp
00003  *
00004  *  Created on: 17.11.2011
00005  *      Author: morgenro
00006  */
00007 
00008 #include "ibrdtn/data/StreamBlock.h"
00009 
00010 namespace dtn
00011 {
00012         namespace data
00013         {
00014                 dtn::data::Block* StreamBlock::Factory::create()
00015                 {
00016                         return new StreamBlock();
00017                 }
00018 
00019                 StreamBlock::StreamBlock()
00020                 : dtn::data::Block(StreamBlock::BLOCK_TYPE), _seq(0), _streamflags(0)
00021                 {
00022                 }
00023 
00024                 StreamBlock::~StreamBlock()
00025                 {
00026 
00027                 }
00028 
00029                 size_t StreamBlock::getLength() const
00030                 {
00031                         return dtn::data::SDNV(_streamflags).getLength() + _seq.getLength();
00032                 }
00033 
00034                 std::ostream& StreamBlock::serialize(std::ostream &stream, size_t&) const
00035                 {
00036                         stream << dtn::data::SDNV(_streamflags);
00037                         stream << _seq;
00038                         return stream;
00039                 }
00040 
00041                 std::istream& StreamBlock::deserialize(std::istream &stream, const size_t)
00042                 {
00043                         dtn::data::SDNV flags;
00044                         stream >> flags; _streamflags = flags.getValue();
00045                         stream >> _seq;
00046                         return stream;
00047                 }
00048 
00049                 void StreamBlock::set(STREAM_FLAGS flag, const bool &value)
00050                 {
00051                         if (value)
00052                         {
00053                                 _streamflags |= flag;
00054                         }
00055                         else
00056                         {
00057                                 _streamflags &= ~(flag);
00058                         }
00059                 }
00060 
00061                 bool StreamBlock::get(STREAM_FLAGS flag) const
00062                 {
00063                         return (_streamflags & flag);
00064                 }
00065 
00066                 void StreamBlock::setSequenceNumber(size_t seq)
00067                 {
00068                         _seq = seq;
00069                 }
00070 
00071                 size_t StreamBlock::getSequenceNumber() const
00072                 {
00073                         return _seq.getValue();
00074                 }
00075         } /* namespace data */
00076 } /* namespace dtn */