input_record_repeat.cpp
Go to the documentation of this file.
00001 #include "input_record_repeat.h"
00002 
00003 using namespace std;
00004 
00005 namespace pangolin
00006 {
00007 
00008 InputRecordRepeat::InputRecordRepeat(const std::string& var_record_prefix)
00009     : record(false), play(false), index(-1)
00010 {
00011     RegisterGuiVarChangedCallback(&InputRecordRepeat::GuiVarChanged,(void*)this,var_record_prefix);
00012 }
00013 
00014 InputRecordRepeat::~InputRecordRepeat()
00015 {
00016 
00017 }
00018 
00019 void InputRecordRepeat::SetIndex(int id)
00020 {
00021 //    if( id < index )
00022 //        Clear();
00023 
00024     index = id;
00025 
00026     while( !play_queue.empty() && play_queue.front().index < index )
00027     {
00028         // 'Play' Frameinput
00029         FrameInput in = play_queue.front();
00030         play_queue.pop_front();
00031         Var<std::string> var(in.var);
00032         var = in.val;
00033     }
00034 }
00035 
00036 void InputRecordRepeat::Record()
00037 {
00038     ClearBuffer();
00039     play = false;
00040     record = true;
00041 }
00042 
00043 void InputRecordRepeat::Stop()
00044 {
00045     record = false;
00046     play = false;
00047 }
00048 
00049 void InputRecordRepeat::ClearBuffer()
00050 {
00051     index = -1;
00052     record_queue.clear();
00053     play_queue.clear();
00054 }
00055 
00056 ostream& operator<<(ostream& os, const FrameInput& fi )
00057 {
00058     os << fi.index << endl << fi.var << endl << fi.val << endl;
00059     return os;
00060 }
00061 
00062 istream& operator>>(istream& is, FrameInput& fi)
00063 {
00064     is >> fi.index;
00065     is.ignore(std::numeric_limits<streamsize>::max(),'\n');
00066     getline(is,fi.var);
00067     getline(is,fi.val);
00068     return is;
00069 }
00070 
00071 void InputRecordRepeat::SaveBuffer(const std::string& filename)
00072 {
00073     ofstream f(filename.c_str());
00074 
00075     for( std::list<FrameInput>::const_iterator i = record_queue.begin(); i!=record_queue.end(); ++i )
00076     {
00077         f << *i;
00078     }
00079 }
00080 
00081 void InputRecordRepeat::LoadBuffer(const std::string& filename)
00082 {
00083     record_queue.clear();
00084 
00085     ifstream f(filename.c_str());
00086     while(f.good())
00087     {
00088         FrameInput fi;
00089         f >> fi;
00090         if( f.good() )
00091             record_queue.push_back(fi);
00092     }
00093 }
00094 
00095 void InputRecordRepeat::PlayBuffer()
00096 {
00097     play_queue = record_queue;
00098 
00099     record = false;
00100     play = true;
00101 }
00102 
00103 void InputRecordRepeat::PlayBuffer(int start, int end)
00104 {
00105     std::list<FrameInput>::iterator s = record_queue.begin();
00106     std::list<FrameInput>::iterator e = record_queue.begin();
00107 
00108     for(int i=0; i<start; i++) s++;
00109     for(int i=0; i<end; i++) e++;
00110 
00111     play_queue.clear();
00112     play_queue.insert(play_queue.begin(),s,e);
00113 
00114     record = false;
00115     play = true;
00116 }
00117 
00118 int InputRecordRepeat::Size()
00119 {
00120     return record_queue.size();
00121 }
00122 
00123 void InputRecordRepeat::UpdateVariable(const std::string& name )
00124 {
00125     Var<std::string> var(name);
00126 
00127     if( record )
00128     {
00129         FrameInput input;
00130         input.index = index;
00131         input.var = name;
00132         input.val = var.a->Get();
00133         record_queue.push_back(input);
00134     }
00135 }
00136 
00137 void InputRecordRepeat::GuiVarChanged(void* data, const std::string& name, _Var& _var)
00138 {
00139     InputRecordRepeat* thisptr = (InputRecordRepeat*)data;
00140 
00141     if( thisptr->record )
00142     {
00143         Var<std::string> var(_var);
00144 
00145         FrameInput input;
00146         input.index = thisptr->index;
00147         input.var = name;
00148         input.val = var.a->Get();
00149 
00150         thisptr->record_queue.push_back(input);
00151     }
00152 }
00153 
00154 }
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines


pangolin_wrapper
Author(s): Todor Stoyanov
autogenerated on Wed Feb 13 2013 14:03:25