IBR-DTNSuite  0.10
AgeBlock.cpp
Go to the documentation of this file.
1 /*
2  * AgeBlock.cpp
3  *
4  * Copyright (C) 2011 IBR, TU Braunschweig
5  *
6  * Written-by: Johannes Morgenroth <morgenroth@ibr.cs.tu-bs.de>
7  *
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  *
20  */
21 
22 #include "ibrdtn/data/AgeBlock.h"
24 
25 namespace dtn
26 {
27  namespace data
28  {
30 
32  {
33  return new AgeBlock();
34  }
35 
37  : dtn::data::Block(AgeBlock::BLOCK_TYPE)
38  {
39  _time.start();
40 
41  // set the replicate in every fragment bit
42  set(REPLICATE_IN_EVERY_FRAGMENT, true);
43  }
44 
46  {
47  }
48 
50  {
51  ibrcommon::TimeMeasurement time = this->_time;
52  time.stop();
53  return _age + static_cast<size_t>(time.getMicroseconds());
54  }
55 
57  {
58  return (getMicroseconds()) / 1000000;
59  }
60 
62  {
63  _age += value;
64  }
65 
67  {
68  _age = value;
69  }
70 
72  {
73  _age += (value * 1000000);
74  }
75 
77  {
78  _age = value * 1000000;
79  }
80 
82  {
83  return getMicroseconds().getLength();
84  }
85 
86  std::ostream& AgeBlock::serialize(std::ostream &stream, dtn::data::Length &length) const
87  {
88  const dtn::data::Number value = getMicroseconds();
89  stream << value;
90  length += value.getLength();
91  return stream;
92  }
93 
94  std::istream& AgeBlock::deserialize(std::istream &stream, const dtn::data::Length&)
95  {
96  stream >> _age;
97  _time.start();
98  return stream;
99  }
100 
102  {
103  return 1;
104  }
105 
106  std::ostream& AgeBlock::serialize_strict(std::ostream &stream, dtn::data::Length &length) const
107  {
108  // we have to ignore the age field, because this is very dynamic data
109  stream << (char)0;
110  length += 1;
111  return stream;
112  }
113  }
114 }