orca-robotics


INTRODUCTION
Overview
Download and Install
Quick Start
Documentation
Publications

REPOSITORY
Interfaces
Components
Libraries
Utilities
Software Map

DEVELOPER
Tutorials
Examples
Dev Guide
Dashboard
Wiki
login/pass: orca/orca

PEOPLE
Contributors
Users

SourceForge.net Logo
Project
Download
Mailing lists

 

         

snapshotlogbuffer.h

00001 #ifndef ORCALOG_SNAPSHOTLOGBUFFER_H
00002 #define ORCALOG_SNAPSHOTLOGBUFFER_H
00003 
00004 #include <orca/orca.h>
00005 #include <deque>
00006 #include <orcalog/logwriter.h>
00007 #include <orcaice/timeutils.h>
00008 
00009 namespace orcalog {
00010 
00016 template<typename ObjectType,typename LogWriterType>
00017 class SnapshotLogBuffer
00018 {
00019 
00020 public: 
00021 
00022     SnapshotLogBuffer( double timeWindowSec )
00023         : timeWindow_(timeWindowSec)
00024         {}
00025 
00027     void addItem( const ObjectType &obj )
00028         {
00029             buffer_.push_back( LogItem( obj, orcaice::getNow() ) );
00030 
00031             // std::cout<<"TRACE(snapshotlogbuffer.h): new time window: " << 
00032             // orcaice::timeDiffAsDouble( buffer_.back().arrivalTime, buffer_.front().arrivalTime ) << std::endl;
00033 
00034             // Delete old stuff if there's too much in the buffer
00035             while ( orcaice::timeDiffAsDouble( buffer_.back().arrivalTime, buffer_.front().arrivalTime ) > timeWindow_ )
00036             {
00037                 buffer_.pop_front();
00038                 // std::cout<<"TRACE(snapshotlogbuffer.h): purgind old data." << std::endl;
00039             }
00040         }
00041 
00042     const uint bufferSize() const
00043         { return buffer_.size(); }
00044 
00045     const orca::Time &oldestArrivalTime() const
00046         { 
00047             assert(buffer_.size()>0);
00048             return buffer_.front().arrivalTime;
00049         }
00050     void writeOldestObjToLogAndDiscard( LogWriterType &logWriter )
00051         {
00052             assert( buffer_.size()>0 );
00053             logWriter.write( buffer_.front().obj, buffer_.front().arrivalTime );
00054             buffer_.pop_front();
00055         }
00056             
00057 private: 
00058 
00059     struct LogItem {
00060         LogItem() {}
00061         LogItem( const ObjectType &o, const orca::Time &t )
00062             : obj(o), arrivalTime(t)
00063             {}
00064 
00065         ObjectType obj;
00066         orca::Time arrivalTime;
00067     };
00068 
00069     std::deque<LogItem> buffer_;
00070     double timeWindow_;
00071 
00072 };
00073 
00074 }
00075 
00076 #endif
 

Webmaster: Tobias Kaupp (tobasco at users.sourceforge.net)


Generated for Orca Robotics by  doxygen 1.4.5