00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #ifndef SST_CORE_TIMELORD_H
00015 #define SST_CORE_TIMELORD_H
00016
00017 #include <sst/core/sst_types.h>
00018 #include <sst/core/serialization.h>
00019
00020 #include <map>
00021 #include <string>
00022
00023 #include <sst/core/simulation.h>
00024 #include <sst/core/unitAlgebra.h>
00025
00026 namespace SST {
00027
00028 class TimeConverter;
00029 class UnitAlgebra;
00030
00031
00032
00033
00034 class TimeLord {
00035 typedef std::map<SimTime_t,TimeConverter*> TimeConverterMap_t;
00036 typedef std::map<std::string,TimeConverter*> StringToTCMap_t;
00037
00038 public:
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050 TimeConverter* getTimeConverter(std::string ts);
00051
00052
00053
00054
00055
00056 TimeConverter* getTimeConverter(const UnitAlgebra& ts);
00057
00058
00059
00060
00061 SimTime_t getSimCycles(std::string timeString, std::string where);
00062
00063
00064
00065 UnitAlgebra getTimeBase() const { return timeBase; }
00066
00067
00068 TimeConverter* getNano() {return nano;}
00069
00070 TimeConverter* getMicro() {return micro;}
00071
00072 TimeConverter* getMilli() {return milli;}
00073
00074 private:
00075 friend class SST::SimulationBase;
00076
00077
00078
00079 TimeConverter *getTimeConverter(SimTime_t simCycles);
00080
00081 TimeLord(std::string timeBaseString);
00082 ~TimeLord();
00083
00084 TimeLord() { }
00085 TimeLord(TimeLord const&);
00086 void operator=(TimeLord const&);
00087
00088
00089 std::string timeBaseString;
00090 TimeConverterMap_t tcMap;
00091 UnitAlgebra timeBase;
00092
00093
00094 StringToTCMap_t parseCache;
00095
00096 TimeConverter* nano;
00097 TimeConverter* micro;
00098 TimeConverter* milli;
00099
00100 friend class boost::serialization::access;
00101 template<class Archive>
00102 void serialize(Archive & ar, const unsigned int version )
00103 {
00104 ar & BOOST_SERIALIZATION_NVP(timeBaseString);
00105 ar & BOOST_SERIALIZATION_NVP(tcMap);
00106
00107 ar & BOOST_SERIALIZATION_NVP(parseCache);
00108 ar & BOOST_SERIALIZATION_NVP(nano);
00109 ar & BOOST_SERIALIZATION_NVP(micro);
00110 ar & BOOST_SERIALIZATION_NVP(milli);
00111 }
00112 };
00113
00114 }
00115
00116 BOOST_CLASS_EXPORT_KEY(SST::TimeLord)
00117
00118 #endif //SST_CORE_TIMELORD_H