/*
*/ /* * * Copyright (c) 1996 * Knowledge Science Institute, University of Calgary * * Permission to use, copy, modify, distribute and sell this software * and its documentation for any purpose is hereby granted without fee, * provided that the above copyright notice appear in all copies and * that both that copyright notice and this permission notice appear * in supporting documentation. The Knowledge Science Institute makes no * representations about the suitability of this software for any * purpose. It is provided "as is" without express or implied warranty. * */ #ifndef CONSTRAINTS #define CONSTRAINTS #ifndef GRAPHS_H #include#endif #ifndef MOBJECT_H #include #endif void initConstraintLibrary(); /* Z spec */ class Validator //:public binary_function { public: typedef enum {silent=0x1} Flags; typedef enum {node=0x1,arc=0x2} Applicability_types; Validator() {} Validator(const Validator& a) {} virtual bool operator()(Component0& apply, Component0& owner, TypedGraph& g, unsigned long flags=0) {return true;} virtual Validator* clone() const {return new Validator(*this);} virtual int operator< (const Validator& r) {return name() >(istream& i, Validator& t) {return t.readFrom(i);}; #define DECL_VALIDATOR(className,applicable) \ class className : public Validator \ { \ public: \ className() {} \ className(const className& a) : Validator(a) {} \ virtual Validator* clone() const {return new className(*this);} \ virtual const string name() const {return string(#className);} \ virtual bool operator()(Component0& apply, Component0& owner, TypedGraph& g, unsigned long flags=0); \ virtual unsigned long applicability() const {return applicable;} \ virtual const string doc() const; \ virtual const string spec() const; \ }; class EditableValidator : public Validator, public EditableObject { public: EditableValidator() : Validator() {} EditableValidator(const EditableValidator& a) : Validator(a) {} virtual Validator* clone() const {return new EditableValidator(*this);} }; ostream& operator<<(ostream& o, const EditableValidator& v) {return o << (const Validator&)v;} istream& operator>>(istream& i, EditableValidator& v) {return i >> (Validator&)v;} class ConjunctionOfValidators : public EditableValidator, public list > { public: ConjunctionOfValidators() {} ConjunctionOfValidators(const ConjunctionOfValidators& a) : EditableValidator(a), list >(a) {} virtual Validator* clone() const {return new ConjunctionOfValidators(*this);} virtual int operator< (const ConjunctionOfValidators& r) {return ((list >)*this)<(list >)r;} virtual bool operator()(Component0& apply, Component0& owner, TypedGraph& g, unsigned long flags=0); virtual const string name() const {return string("ConjunctionOfValidators");} virtual const string doc() const; virtual const string spec() const; virtual int edit() {return edit(0xFFFFFFFF);} virtual int edit(unsigned long filter); virtual ostream& printOn(ostream& o) const; virtual istream& readFrom(istream& i); }; #endif /* */