MIRA
Tape.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2012 by
3  * MetraLabs GmbH (MLAB), GERMANY
4  * and
5  * Neuroinformatics and Cognitive Robotics Labs (NICR) at TU Ilmenau, GERMANY
6  * All rights reserved.
7  *
8  * Contact: info@mira-project.org
9  *
10  * Commercial Usage:
11  * Licensees holding valid commercial licenses may use this file in
12  * accordance with the commercial license agreement provided with the
13  * software or, alternatively, in accordance with the terms contained in
14  * a written agreement between you and MLAB or NICR.
15  *
16  * GNU General Public License Usage:
17  * Alternatively, this file may be used under the terms of the GNU
18  * General Public License version 3.0 as published by the Free Software
19  * Foundation and appearing in the file LICENSE.GPL3 included in the
20  * packaging of this file. Please review the following information to
21  * ensure the GNU General Public License version 3.0 requirements will be
22  * met: http://www.gnu.org/copyleft/gpl.html.
23  * Alternatively you may (at your option) use any later version of the GNU
24  * General Public License if such license has been publicly approved by
25  * MLAB and NICR (or its successors, if any).
26  *
27  * IN NO EVENT SHALL "MLAB" OR "NICR" BE LIABLE TO ANY PARTY FOR DIRECT,
28  * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF
29  * THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF "MLAB" OR
30  * "NICR" HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  *
32  * "MLAB" AND "NICR" SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING,
33  * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
34  * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
35  * ON AN "AS IS" BASIS, AND "MLAB" AND "NICR" HAVE NO OBLIGATION TO
36  * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS OR MODIFICATIONS.
37  */
38 
47 #ifndef _MIRA_TAPE_H_
48 #define _MIRA_TAPE_H_
49 
50 #ifndef Q_MOC_RUN
51 #include <boost/optional.hpp>
52 #endif
53 
54 #include <utils/Path.h>
55 #include <fw/Framework.h>
56 
57 #include <platform/Platform.h>
58 
59 namespace mira {
60 
62 
143 {
144 public:
146  static const uint32 sHeaderSize;
147  // size of a message block packet
148  static const uint32 sMessageBlockSize;
149 
151  enum OpenMode
152  {
156  };
160 
163  {
164  MESSAGEBLOCK = 0x0A,
165  CHANNELINFO = 0x0B,
166  MESSAGE = 0x0C,
167  INDEX = 0x0D
168  };
169 
171  struct Header
172  {
173  char type;
174  uint32 size;
175  };
176 
179  {
180  uint64 block;
181  uint64 offset;
183  };
184 
186  struct ChannelInfo
187  {
188  typedef std::vector<MessageIndex> MessageVector;
189  uint64 offset;
193  std::string name;
194  std::string type;
198  uint64 dataSize;
199  };
200 
202  struct FileInfo
203  {
204  std::fstream file;
207  std::string filename;
208  uint32 version;
209  uint32 nrBlocks;
210  uint32 nrChannels;
212  };
213 
216  {
217  uint64 offset;
218  uint32 nrMessages;
219  uint32 size;
223  };
224 
226  struct Message
227  {
228  bool compressed;
229  std::string name;
230  std::string frameID;
231  uint32 sequenceID;
234  };
235 
237  typedef std::map<std::string, ChannelInfo> ChannelMap;
239  typedef std::map<uint64, MessageBlock> MessageBlockMap;
241  typedef std::multimap<Duration, Message> MessageMap;
242 
243  Tape() :
244  mIsOpen(false),
245  mWaitForAlteredStartTime(false),
246  mMaxMessageBlockSize(64 * 1024* 1024),
247  mSortWindowSize(Duration::seconds(2))
248  {}
249 
250  ~Tape();
251 
257  void open(const Path& file, OpenMode mode);
258 
262  void close();
263 
270  void repair(const Path& file, const Path& outFile);
271 
283  void waitForAlteredStartTime();
284 
293  void alterStartTime(const Time& startTime);
294 
305  template <typename T>
306  MIRA_DEPRECATED("Please use int compressionLevel(=0/-1) instead of bool compress(=false/true)",
307  std::size_t write(ChannelRead<T> value, bool compress,
308  TypeMetaPtr meta = TypeMetaPtr(),
309  const MetaTypeDatabase& metaDB = MetaTypeDatabase()))
310  {
311  if (!mIsOpen || mMode != WRITE)
312  MIRA_THROW(XIO, "Tape is not opened in write mode");
313  return write(value.getChannelID(), value.getTypename(),
314  value->timestamp, value.readSerialized(),
315  (compress ? -1 : 0), meta, metaDB);
316  }
317 
329  template <typename T>
330  std::size_t write(ChannelRead<T> value, int compressionLevel = 0,
331  TypeMetaPtr meta = TypeMetaPtr(),
332  const MetaTypeDatabase& metaDB = MetaTypeDatabase())
333  {
334  if (!mIsOpen || mMode != WRITE)
335  MIRA_THROW(XIO, "Tape is not opened in write mode");
336  return write(value.getChannelID(), value.getTypename(),
337  value->timestamp, value.readSerialized(),
338  compressionLevel, meta, metaDB);
339  }
340 
353  template <typename T>
354  MIRA_DEPRECATED("Please use int compressionLevel(=0/-1) instead of bool compress(=false/true)",
355  std::size_t write(ChannelRead<T> value,
356  std::list<BinarySerializerCodecPtr>& codecs,
357  bool compress, TypeMetaPtr meta = TypeMetaPtr(),
358  const MetaTypeDatabase& metaDB = MetaTypeDatabase()))
359  {
360  if (!mIsOpen || mMode != WRITE)
361  MIRA_THROW(XIO, "Tape is not opened in write mode");
362  return write(value.getChannelID(), value.getTypename(),
363  value->timestamp, value.readSerialized(codecs),
364  (compress ? -1 : 0), meta, metaDB);
365  }
366 
380  template <typename T>
381  std::size_t write(ChannelRead<T> value,
382  std::list<BinarySerializerCodecPtr>& codecs,
383  int compressionLevel = 0, TypeMetaPtr meta = TypeMetaPtr(),
384  const MetaTypeDatabase& metaDB = MetaTypeDatabase())
385  {
386  if (!mIsOpen || mMode != WRITE)
387  MIRA_THROW(XIO, "Tape is not opened in write mode");
388  return write(value.getChannelID(), value.getTypename(),
389  value->timestamp, value.readSerialized(codecs),
390  compressionLevel, meta, metaDB);
391  }
392 
405  template <typename T>
406  MIRA_DEPRECATED("Please use int compressionLevel(=0/-1) instead of bool compress(=false/true)",
407  std::size_t write(const std::string& channelID, const Stamped<T>& value,
408  bool compress, TypeMetaPtr meta = TypeMetaPtr(),
409  const MetaTypeDatabase& metaDB = MetaTypeDatabase()))
410  {
411  Buffer<uint8> buffer;
412  BinaryBufferSerializer s(&buffer);
413  s.serialize(value.value(),false);
414  return write(channelID, typeName<T>(), value.timestamp,
415  value.frameID, value.sequenceID,
416  buffer, (compress ? -1 : 0), meta, metaDB);
417  }
418 
432  template <typename T>
433  std::size_t write(const std::string& channelID, const Stamped<T>& value,
434  int compressionLevel = 0, TypeMetaPtr meta = TypeMetaPtr(),
435  const MetaTypeDatabase& metaDB = MetaTypeDatabase())
436  {
437  Buffer<uint8> buffer;
438  BinaryBufferSerializer s(&buffer);
439  s.serialize(value.value(),false);
440  return write(channelID, typeName<T>(), value.timestamp,
441  value.frameID, value.sequenceID,
442  buffer, compressionLevel, meta, metaDB);
443  }
444 
459  MIRA_DEPRECATED("Please use int compressionLevel(=0/-1) instead of bool compress(=false/true)",
460  std::size_t write(const std::string& channelID, const std::string& typeName,
461  const StampedHeader& header,
462  const Buffer<uint8>& data, bool compress,
463  TypeMetaPtr meta = TypeMetaPtr(),
464  const MetaTypeDatabase& metaDB = MetaTypeDatabase()))
465  {
466  return write(channelID, typeName, header.timestamp, header.frameID,
467  header.sequenceID, data, (compress ? -1 : 0), meta, metaDB);
468  }
469 
485  std::size_t write(const std::string& channelID, const std::string& typeName,
486  const StampedHeader& header,
487  const Buffer<uint8>& data, int compressionLevel = 0,
488  TypeMetaPtr meta = TypeMetaPtr(),
489  const MetaTypeDatabase& metaDB = MetaTypeDatabase())
490  {
491  return write(channelID, typeName, header.timestamp, header.frameID,
492  header.sequenceID, data, compressionLevel, meta, metaDB);
493  }
494 
510  MIRA_DEPRECATED("Please use int compressionLevel(=0/-1) instead of bool compress(=false/true)",
511  std::size_t write(const std::string& channelID, const std::string& typeName,
512  const Time& time, const std::string& frameID, uint32 sequenceID,
513  const Buffer<uint8>& data, bool compress,
514  TypeMetaPtr meta = TypeMetaPtr(),
515  const MetaTypeDatabase& metaDB = MetaTypeDatabase()))
516  {
517  return write(channelID, typeName, time, frameID, sequenceID,
518  data, (compress ? -1 : 0), meta, metaDB);
519  }
520 
537  std::size_t write(const std::string& channelID, const std::string& typeName,
538  const Time& time, const std::string& frameID, uint32 sequenceID,
539  const Buffer<uint8>& data, int compressionLevel = 0,
540  TypeMetaPtr meta = TypeMetaPtr(),
541  const MetaTypeDatabase& metaDB = MetaTypeDatabase());
542 
547  void setMaxMessageBlockSize(uint32 size)
548  {
549  mMaxMessageBlockSize = size;
550  }
551 
559  void setSortWindowSize(const Duration& interval)
560  {
561  mSortWindowSize = interval;
562  }
563 
570  void setStartTime(Time time)
571  {
572  mFile.start = time;
573  mFile.timezoneOffset = mFile.start.toLocal() - mFile.start;
574  }
575 
582  {
583  if (!mIsOpen)
584  MIRA_THROW(XIO, "Tape is not opened.");
585  return mFile.start;
586  }
587 
594  {
595  if (!mIsOpen)
596  MIRA_THROW(XIO, "Tape is not opened.");
597  return mFile.start + mFile.timezoneOffset;
598  }
599 
605  Time getEndTime() const
606  {
607  if (!mIsOpen)
608  MIRA_THROW(XIO, "Tape is not opened.");
609  if (mMessageBlocks.size()==0)
610  return Time::unixEpoch();
611  return mFile.start + mMessageBlocks.rbegin()->second.lastMessageOffset;
612  }
613 
623  {
624  if (!mIsOpen)
625  MIRA_THROW(XIO, "Tape is not opened.");
626  return mFile.timezoneOffset;
627  }
628 
635  {
636  if (!mIsOpen)
637  MIRA_THROW(XIO, "Tape is not opened.");
638  return mChannels;
639  }
640 
647  {
648  if (!mIsOpen)
649  MIRA_THROW(XIO, "Tape is not opened.");
650  return mMessageBlocks;
651  }
652 
658  uint32 getVersion() const
659  {
660  if (!mIsOpen)
661  MIRA_THROW(XIO, "Tape is not opened.");
662  return mFile.version;
663  }
664 
671  static uint32 getCurrentVersion();
672 
686  void readMessage(const MessageIndex& index, std::string& frameID,
687  uint32& sequenceID, Buffer<uint8>& oData, Duration& oTime);
688 
694  void readMessage(const MessageIndex& index, std::string& frameID,
695  uint32& sequenceID, Buffer<uint8>& oData, Duration& oTime,
696  bool& oCompressed);
697 
698 
699 protected:
700 
701  uint64 getFileHeaderSize() const;
702  void openInfo(const Path& file);
703  void openRead(const Path& file);
704  void closeRead();
705  void openWrite(const Path& file);
706  void closeWrite();
707  void openRepair(const Path& file);
708 
709  void write(Duration time, const Message& message);
710 
711  void readFileHeader();
712  void readChannelInfo();
713  void readMessageBlocks();
714  void readMessageBlock(uint64 offset);
715  void writeFileHeader();
716  Tape::Header readHeader();
717  void writeHeader(HeaderType type, uint32 size);
718  void writeChannelInfo(ChannelInfo& info);
719  void startMessageBlock(Duration time);
720  void finishMessageBlock();
721 
722 protected:
723 
724  bool mIsOpen;
728  std::set<std::string> mWrittenChannels;
729  boost::optional<MessageBlock> mCurrentMessageBlock;
730  boost::mutex mMutex;
731  boost::mutex mMessageMutex;
734  uint64 mLastInfo;
736 
739 };
740 
742 
743 }
744 
745 #endif
MessageBlockMap mMessageBlocks
Pairs of offset - message block.
Definition: Tape.h:732
A tape is a binary file that contains recorded/serialized data of one or multiple channels...
Definition: Tape.h:142
static const uint32 sHeaderSize
size of the header packet
Definition: Tape.h:146
Database that stores all meta type information and provides additional functions for accessing the da...
Definition: MetaSerializer.h:509
Duration timezoneOffset
Offset of the timezone on the recording machine to UTC.
Definition: Tape.h:206
Definition: BinarySerializer.h:324
std::size_t write(const std::string &channelID, const std::string &typeName, const StampedHeader &header, const Buffer< uint8 > &data, int compressionLevel=0, TypeMetaPtr meta=TypeMetaPtr(), const MetaTypeDatabase &metaDB=MetaTypeDatabase())
Write the serialized data into the tape.
Definition: Tape.h:485
uint32 nrBlocks
Nr of message data blocks.
Definition: Tape.h:209
T & value()
Returns a read-write reference to the underlying data.
Definition: Stamped.h:202
Duration timeOffset
Time offset of the message relative to start time of tape.
Definition: Tape.h:182
HeaderType
The type of the header specifying the following packet.
Definition: Tape.h:162
std::vector< MessageIndex > MessageVector
Definition: Tape.h:188
boost::mutex mMutex
Definition: Tape.h:730
uint32 getVersion() const
Get the version of the tape.
Definition: Tape.h:658
Buffer< uint8 > buffer
Buffer for the block data.
Definition: Tape.h:222
PropertyHint file(const std::string &filters=std::string(), bool save=false)
Tells the property editor that the path is for a file, and that it should show a "File Open"/"File Sa...
Definition: Path.h:247
Time toLocal() const
Converts to local time zone based on the settings of the machine.
Definition: Time.h:560
Time timestamp
The time stamp when the data was obtained.
Definition: Stamped.h:104
MetaTypeDatabase metaDB
Database of meta information needed by this type.
Definition: Tape.h:196
specialize cv::DataType for our ImgPixel and inherit from cv::DataType<Vec>
Definition: IOService.h:67
uint64 offsetToIndexTable
Offset in bytes of the index table for the channel.
Definition: Tape.h:190
boost::filesystem::path Path
Typedef of a Path (shorter version for boost::filesystem::path)
Definition: Path.h:69
bool mIsOpen
Definition: Tape.h:724
Duration firstMessageOffset
Time offset of the first message in the channel.
Definition: Tape.h:191
bool mWaitForAlteredStartTime
Definition: Tape.h:725
Time getStartTime() const
Get the time when the recording started.
Definition: Tape.h:581
Duration mSortWindowSize
Size of the window used for sorting messages in a tape.
Definition: Tape.h:738
TypeMetaPtr meta
Type meta information.
Definition: Tape.h:195
const Tape::ChannelMap & getChannels() const
Get a list of channels in the tape.
Definition: Tape.h:634
Definition: Tape.h:154
static const uint32 sMessageBlockSize
Definition: Tape.h:148
Duration lastMessageOffset
Time offset of the last message in the block.
Definition: Tape.h:221
OpenMode
The open mode for a tape.
Definition: Tape.h:151
static Time unixEpoch()
Returns the unix epoch 1.1.1970 0:0:0.000.
Definition: Time.h:514
Time getLocalStartTime() const
Get the time when the recording started in the local timezone of the machine the recording took place...
Definition: Tape.h:593
std::string name
Name of the messages channel.
Definition: Tape.h:229
Time start
Start recording time.
Definition: Tape.h:205
Definition: Tape.h:153
An object that allows read access to data of a channel.
Definition: ChannelReadWrite.h:435
std::size_t write(ChannelRead< T > value, int compressionLevel=0, TypeMetaPtr meta=TypeMetaPtr(), const MetaTypeDatabase &metaDB=MetaTypeDatabase())
Write the content of a channel into the tape.
Definition: Tape.h:330
#define MIRA_THROW(ex, msg)
Macro for throwing an exception.
Definition: Exception.h:81
void serialize(const T &value, bool enableTypeCheck=true)
Provides a special serialize interface for the BinarySerializer.
Definition: BinarySerializer.h:598
uint32 nrChannels
Nr of channels.
Definition: Tape.h:210
Information about a channel in a tape.
Definition: Tape.h:186
std::string filename
Name of the tape.
Definition: Tape.h:207
const Tape::MessageBlockMap & getMessageBlocks() const
Get a list of the tapes message blocks.
Definition: Tape.h:646
Wrapper class for boost::posix_time::ptime for adding more functionality to it.
Definition: Time.h:421
uint32 sequenceID
Sequence id of the message.
Definition: Tape.h:231
Duration getTZOffset() const
Get the time zone offset.
Definition: Tape.h:622
ChannelMap mChannels
Definition: Tape.h:727
uint32 size
Size of the block.
Definition: Tape.h:219
Definition: Tape.h:155
std::string type
Typename of the channel.
Definition: Tape.h:194
MIRA_BASE_EXPORT void write(const Value &value, std::ostream &ioStream, bool formatted=false, int precision=-1)
Writes a json::Value into a given stream using the JSON format.
std::map< uint64, MessageBlock > MessageBlockMap
maps a message block to an offset
Definition: Tape.h:239
std::string frameID
Frame id of the message.
Definition: Tape.h:230
std::size_t write(ChannelRead< T > value, std::list< BinarySerializerCodecPtr > &codecs, int compressionLevel=0, TypeMetaPtr meta=TypeMetaPtr(), const MetaTypeDatabase &metaDB=MetaTypeDatabase())
Write the content of a channel into the tape.
Definition: Tape.h:381
MIRA_DEPRECATED("Please use int compressionLevel(=0/-1) instead of bool compress(=false/true)", std::size_t write(const std::string &channelID, const std::string &typeName, const StampedHeader &header, const Buffer< uint8 > &data, bool compress, TypeMetaPtr meta=TypeMetaPtr(), const MetaTypeDatabase &metaDB=MetaTypeDatabase()))
Write the serialized data into the tape.
Definition: Tape.h:459
FileInfo mFile
File informations.
Definition: Tape.h:733
uint64 offsetToFirstInfo
Offset to the first channel info packet.
Definition: Tape.h:211
#define MIRA_FRAMEWORK_EXPORT
Definition: FrameworkExports.h:61
MessageVector messages
Messages.
Definition: Tape.h:197
PropertyHint type(const std::string &t)
Sets the attribute "type" to the specified value.
Definition: PropertyHint.h:295
bool compressed
Is message compressed.
Definition: Tape.h:228
void setMaxMessageBlockSize(uint32 size)
Set the maximum size of the chunks.
Definition: Tape.h:547
Use this class to represent time durations.
Definition: Time.h:104
The common header for all stamped data.
Definition: Stamped.h:62
void setStartTime(Time time)
Set an alternative start time for recording.
Definition: Tape.h:570
boost::optional< MessageBlock > mCurrentMessageBlock
Definition: Tape.h:729
std::size_t write(const std::string &channelID, const Stamped< T > &value, int compressionLevel=0, TypeMetaPtr meta=TypeMetaPtr(), const MetaTypeDatabase &metaDB=MetaTypeDatabase())
Write the stamped data into the tape.
Definition: Tape.h:433
uint64 offset
Offset in bytes of the info packet in the tape.
Definition: Tape.h:189
uint64 mLastInfo
Offset to the last written info field.
Definition: Tape.h:734
boost::mutex mMessageMutex
Definition: Tape.h:731
MessageMap mMessages
Messages we have not yet written to file (in the sort window)
Definition: Tape.h:737
MIRA_DEPRECATED("Please use int compressionLevel(=0/-1) instead of bool compress(=false/true)", std::size_t write(ChannelRead< T > value, std::list< BinarySerializerCodecPtr > &codecs, bool compress, TypeMetaPtr meta=TypeMetaPtr(), const MetaTypeDatabase &metaDB=MetaTypeDatabase()))
Write the content of a channel into the tape.
Definition: Tape.h:354
MIRA_DEPRECATED("Please use int compressionLevel(=0/-1) instead of bool compress(=false/true)", std::size_t write(const std::string &channelID, const Stamped< T > &value, bool compress, TypeMetaPtr meta=TypeMetaPtr(), const MetaTypeDatabase &metaDB=MetaTypeDatabase()))
Write the stamped data into the tape.
Definition: Tape.h:406
const std::string & getChannelID()
Definition: ChannelReadWrite.h:190
Mix in for adding a time stamp, an optional frame id and an optional sequence id to data types like P...
Definition: Stamped.h:149
boost::shared_ptr< TypeMeta > TypeMetaPtr
Definition: MetaSerializer.h:309
uint32 size
Size of the packet.
Definition: Tape.h:174
OpenMode mMode
Definition: Tape.h:726
uint64 dataSize
Size of all messages in bytes.
Definition: Tape.h:198
Header containing type and size of the following packet.
Definition: Tape.h:171
uint64 block
Offset in bytes of the containing block in the tape.
Definition: Tape.h:180
Time getEndTime() const
Get the time of the last entry.
Definition: Tape.h:605
uint32 mMaxMessageBlockSize
Maximum size of a message block.
Definition: Tape.h:735
MIRA_DEPRECATED("Please use int compressionLevel(=0/-1) instead of bool compress(=false/true)", std::size_t write(const std::string &channelID, const std::string &typeName, const Time &time, const std::string &frameID, uint32 sequenceID, const Buffer< uint8 > &data, bool compress, TypeMetaPtr meta=TypeMetaPtr(), const MetaTypeDatabase &metaDB=MetaTypeDatabase()))
Low level write method to write serialized binary data to the tape.
Definition: Tape.h:510
uint32 version
Tape version.
Definition: Tape.h:208
std::string getTypename() const
Definition: ChannelReadWrite.h:195
uint64 offset
Offset in bytes of the message in the containing block.
Definition: Tape.h:181
Functions for modifying file system paths.
std::multimap< Duration, Message > MessageMap
maps a message to an time offset
Definition: Tape.h:241
Struct for a message block in a tape.
Definition: Tape.h:215
Buffer< uint8 > data
Buffer for the message data.
Definition: Tape.h:232
void setSortWindowSize(const Duration &interval)
Messages get sorted before they are written to a tape to guarantee a correct temporal order...
Definition: Tape.h:559
Duration lastMessageOffset
Time offset of the last message in the channel.
Definition: Tape.h:192
uint64 offset
Offset in bytes of the block in the tape.
Definition: Tape.h:217
std::map< std::string, ChannelInfo > ChannelMap
maps channel information to a channel names
Definition: Tape.h:237
std::set< std::string > mWrittenChannels
Definition: Tape.h:728
std::fstream file
The file stream.
Definition: Tape.h:204
Duration firstMessageOffset
Time offset of the first message in the block.
Definition: Tape.h:220
char type
Type of the packet (see HeaderType)
Definition: Tape.h:173
Index entry for a message in the tape.
Definition: Tape.h:178
uint32 uncompressedSize
Uncompressed size of the message.
Definition: Tape.h:233
Information about a tape file.
Definition: Tape.h:202
MIRA_DEPRECATED("Please use int compressionLevel(=0/-1) instead of bool compress(=false/true)", std::size_t write(ChannelRead< T > value, bool compress, TypeMetaPtr meta=TypeMetaPtr(), const MetaTypeDatabase &metaDB=MetaTypeDatabase()))
Write the content of a channel into the tape.
Definition: Tape.h:306
uint32 sequenceID
A user defined sequence ID.
Definition: Stamped.h:111
The framework that holds all manager classes and provides startup and shutdown of all framework relat...
Struct for message data in a tape.
Definition: Tape.h:226
Typename typeName(bool cvqualify=true)
Returns a compiler and platform independent typename of T.
Definition: Typename.h:103
std::string frameID
The unique id of the transform frame that this data is assigned to (if any, otherwise empty) ...
Definition: Stamped.h:108
std::string name
Name of the channel.
Definition: Tape.h:193
Tape()
Definition: Tape.h:243
Platform dependent defines and macros.
uint32 nrMessages
Nr of contained messages.
Definition: Tape.h:218