/* Web Polygraph http://www.web-polygraph.org/
* (C) 2003-2006 The Measurement Factory
* Licensed under the Apache License, Version 2.0 */
#include "base/polygraph.h"
#include "xstd/h/iostream.h"
#include "xstd/gadgets.h"
#include "base/StringArrayBlocks.h"
/* StringArrayBlock */
bool StringArrayBlock::canMerge(const StringArrayBlock &b) const {
if (this->type() == b.type())
return canMergeSameType(b);
else
return false;
}
void StringArrayBlock::merge(const StringArrayBlock &b) {
if (this->type() == b.type())
mergeSameType(b);
else
Should(false);
}
/* StringArrayPoint */
StringArrayBlock::TypeAnchor StringArrayPoint::TheTypeAnchor;
StringArrayPoint::StringArrayPoint(const String &aPoint):
StringArrayBlock(&TheTypeAnchor), thePoint(aPoint) {
}
StringArrayBlock *StringArrayPoint::clone() const {
return new StringArrayPoint(thePoint);
}
int StringArrayPoint::count() const {
return 1;
}
bool StringArrayPoint::find(const Area &member, int &idx) const {
return thePoint.len() == member.size() && thePoint.find(member) == 0;
}
bool StringArrayPoint::canMergeSameType(const StringArrayBlock &b) const {
return thePoint == ((const StringArrayPoint&)b).thePoint;
}
void StringArrayPoint::mergeSameType(const StringArrayBlock &b) {
Should(canMergeSameType(b));
}
String StringArrayPoint::item(int idx) const {
if (Should(idx == 0))
return thePoint;
return String();
}
syntax highlighted by Code2HTML, v. 0.9.1