/* Web Polygraph http://www.web-polygraph.org/
* (C) 2003-2006 The Measurement Factory
* Licensed under the Apache License, Version 2.0 */
#ifndef POLYGRAPH__XSTD_INTERVAL_H
#define POLYGRAPH__XSTD_INTERVAL_H
#include "xstd/gadgets.h" /* just for Max */
// beg <= x < end
class Interval {
public:
Interval(): theBeg(0), theEnd(0) {}
Interval(int aBeg, int anEnd): theBeg(aBeg), theEnd(anEnd) {}
bool empty() const { return theBeg >= theEnd; }
operator void*() const { return empty() ? 0 : (void*)this; }
int beg() const { return theBeg; }
int end() const { return theEnd; }
int size() const { return theBeg < theEnd ? theEnd - theBeg : 0; }
bool has(int point) const { return theBeg <= point && point < theEnd; }
void begAt(int aBeg) { theBeg = aBeg; }
void endAt(int anEnd) { theEnd = anEnd; }
inline Interval exceptHead(const Interval &i) const;
protected:
int theBeg;
int theEnd;
};
inline
Interval Interval::exceptHead(const Interval &i) const {
const int newBeg = Max(beg(), i.end());
if (newBeg < end())
return Interval(newBeg, end());
else
return Interval(end(), end());
}
#endif
syntax highlighted by Code2HTML, v. 0.9.1