/* Web Polygraph http://www.web-polygraph.org/
* (C) 2003-2006 The Measurement Factory
* Licensed under the Apache License, Version 2.0 */
#ifndef POLYGRAPH__BASE_STRINGRANGEBLOCKS_H
#define POLYGRAPH__BASE_STRINGRANGEBLOCKS_H
#include "xstd/String.h"
// interface for one "block" of a string range
class StringRangeBlock {
public:
enum Type { sbtNone = 0, sbtPoint, sbtInterval, sbtEnd };
public:
StringRangeBlock(Type aType): theType(aType) {}
virtual ~StringRangeBlock() {}
int type() const { return theType; }
virtual int count() const = 0;
virtual StringRangeBlock *clone() const = 0;
virtual bool findTail(const Area &a, int &tailPos, int &idx) const = 0;
int diffCount(const StringRangeBlock &b) const;
void merge(StringRangeBlock &b);
virtual bool atLast() const = 0;
virtual int pos() const = 0;
virtual void start() = 0;
virtual void next() = 0;
virtual void pos(int aPos) = 0;
virtual void print(ostream &os) const = 0;
virtual void printCur(ostream &os) const = 0;
protected:
int theType;
};
// single point within a range
class StringRangePoint: public StringRangeBlock {
public:
StringRangePoint(const String &aPoint);
virtual int count() const;
virtual StringRangeBlock *clone() const;
virtual bool findTail(const Area &a, int &tailPos, int &idx) const;
int countDiffs(const StringRangePoint &b) const;
void mergeWith(const StringRangePoint &b);
virtual bool atLast() const;
virtual int pos() const;
virtual void start();
virtual void next();
virtual void pos(int aPos);
virtual void print(ostream &os) const;
virtual void printCur(ostream &os) const;
protected:
String thePoint;
};
// an interval within a range
class StringRangeInterval: public StringRangeBlock {
public:
StringRangeInterval(int aStart, int aStop, bool beIsolated, int aBase);
virtual int count() const;
virtual StringRangeBlock *clone() const;
virtual bool findTail(const Area &a, int &tailPos, int &idx) const;
int countDiffs(const StringRangeInterval &b) const;
void mergeWith(const StringRangeInterval &b);
virtual bool atLast() const;
virtual int pos() const;
virtual void start();
virtual void next();
virtual void pos(int aPos);
virtual void print(ostream &os) const;
virtual void printCur(ostream &os) const;
protected:
bool contains(int pos) const;
protected:
int theStart;
int theStop;
int theBase;
int thePos;
bool isIsolated;
};
#endif
syntax highlighted by Code2HTML, v. 0.9.1