00001 #include "Event/RegistrationSequence.h" 00002 00003 using namespace DayaBay; 00004 00005 DayaBay::RegistrationSequence::RegistrationSequence() 00006 { 00007 setEarliest(TimeStamp::GetBOT()); 00008 setLatest(TimeStamp::GetBOT()); 00009 m_registrations = new Registrations(); 00010 } 00011 00012 DayaBay::RegistrationSequence::~RegistrationSequence() 00013 { 00014 if (m_registrations) { 00015 m_registrations->clear(); 00016 delete m_registrations; 00017 m_registrations = 0; 00018 } 00019 } 00020 00021 const std::string& defLoc() { return RegistrationSequenceLocation::Default; } 00022 00023 void DayaBay::RegistrationSequence::setRegistrations(Registrations* value) 00024 { 00025 delete m_registrations; 00026 m_registrations = value; 00027 } 00028 00029 bool RegistrationSequence::empty() const 00030 { 00031 return m_registrations->empty(); 00032 } 00033 00034 RegistrationSequence::size_type RegistrationSequence::size() const 00035 { 00036 return m_registrations->size(); 00037 } 00038 00039 const RegistrationSequence::Registrations& RegistrationSequence::registrations() const { 00040 return *m_registrations; 00041 } 00042 00043 void RegistrationSequence::insert(IRegistry* registry, 00044 DataObject* object, 00045 bool marked) { 00046 if ( 0 == object) { 00047 return; 00048 } 00049 00050 TemporalDataObject* temporal = dynamic_cast<TemporalDataObject*>(object); 00051 if (0 != temporal) { 00052 // only do something when the object has a meaningful time 00053 if(temporal->earliest() != TimeStamp::GetBOT() && 00054 temporal->latest() != TimeStamp::GetBOT() ) { 00055 00056 if (TimeStamp::GetBOT() == earliest() || earliest() > temporal->earliest()) { 00057 setEarliest(temporal->earliest()); 00058 } 00059 00060 if (TimeStamp::GetBOT() == latest() || latest() < temporal->latest()) { 00061 setLatest(temporal->latest()); 00062 } 00063 } 00064 } 00065 00066 m_registrations->push_back(Registration(registry, 00067 object, 00068 marked)); 00069 00070 } 00071 00072 RegistrationSequence::Registrations 00073 RegistrationSequence::registration(const std::string& path) const 00074 { 00075 Registrations ret; 00076 00077 IRegistrationSequence::Registrations::iterator it, 00078 done = m_registrations->end(); 00079 for (it = m_registrations->begin(); it != done; ++it) { 00080 if (it->path() == path) ret.push_back(*it); 00081 } 00082 return ret; 00083 } 00084 00085 RegistrationSequence::Registration* 00086 RegistrationSequence::registration(const DataObject* dobj) const 00087 { 00088 IRegistrationSequence::Registrations::iterator it, 00089 done = m_registrations->end(); 00090 for (it = m_registrations->begin(); it != done; ++it) { 00091 if (it->object() == dobj) return &(*it); 00092 } 00093 return 0; 00094 } 00095 00096 std::ostream& RegistrationSequence::fillStream(std::ostream& s) const 00097 { 00098 TemporalDataObject::fillStream(s); 00099 s << "{ " << m_registrations->size() << " registrations :\n"; 00100 IRegistrationSequence::Registrations::iterator it, 00101 done = m_registrations->end(); 00102 int count = 0; 00103 for (it = m_registrations->begin(); it != done; ++it) { 00104 DataObject* dobj = it->object(); 00105 00106 s << "\n[" << count++ << "] " << dobj->name() 00107 << " (entry=" << it->entry() 00108 << ",store=" << it->store() << ")" 00109 << ": "; dobj->fillStream(s); 00110 } 00111 s << "\n}\n"; 00112 return s; 00113 }