/* Web Polygraph http://www.web-polygraph.org/ * (C) 2003-2006 The Measurement Factory * Licensed under the Apache License, Version 2.0 */ #ifndef POLYGRAPH__PGL_PGLLISTSYM_H #define POLYGRAPH__PGL_PGLLISTSYM_H #include "xstd/Array.h" #include "pgl/PglExprSym.h" // list of symbols of any type class ListSym: protected Array, public ExpressionSym { public: static const String TheType; public: ListSym(); ListSym(const String &aType); ListSym(const ListSym &aList); virtual ~ListSym(); virtual bool isA(const String &type) const; int count() const { return Array::count(); } const SynSym *operator [](int idx) const { return item(idx); } const SynSym *item(int idx) const { return Array::item(idx); } void add(const SynSym &s); void clear(); virtual ostream &print(ostream &os, const String &pfx) const; protected: virtual SynSym *dupe(const String &dType) const; bool absorb(const ListSym &arr); void doAdd(SynSym *sclone); virtual void addFailure(const SynSym &s); virtual bool cadd(const SynSym &s); }; #endif