#include "LockSegment.hh" #include #include using namespace std; //====================================== Segment constructor LockSegment::LockSegment(id_type id, const Time& t0, const Interval dT, flag_type flg) : mID(id), mStart(t0), mDuration(dT), mFlags(flg) { } //====================================== Set segment range void LockSegment::setRange(const Time& t0, const Interval dT) { mStart = t0; mDuration = dT; } //====================================== And the segments LockSegment& LockSegment::operator&= (const LockSegment& s) { Time tEnd = getEndTime(); Time tEnd1 = s.getEndTime(); if (mStart < s.mStart) mStart = s.mStart; if (tEnd1 < tEnd) tEnd = tEnd1; if (tEnd <= mStart) throw runtime_error("Segments don't overlap"); mDuration = tEnd - mStart; mFlags &= s.mFlags; return *this; } //====================================== Or the segments LockSegment& LockSegment::operator|= (const LockSegment& s) { Time tEnd = getEndTime(); Time tEnd1 = s.getEndTime(); if (tEnd1 s.mStart) mStart = s.mStart; if (tEnd1 > tEnd) tEnd = tEnd1; mDuration = tEnd - mStart; mFlags |= s.mFlags; return *this; } //====================================== Print to ostream. ostream& operator<<(ostream& o, const LockSegment& s) { return o << s.getStartTime().getS() << ":" << s.getDuration(); }