summaryrefslogtreecommitdiff
path: root/libs/cassowary/cassowary/ClFDVariable.h
diff options
context:
space:
mode:
Diffstat (limited to 'libs/cassowary/cassowary/ClFDVariable.h')
-rw-r--r--libs/cassowary/cassowary/ClFDVariable.h126
1 files changed, 126 insertions, 0 deletions
diff --git a/libs/cassowary/cassowary/ClFDVariable.h b/libs/cassowary/cassowary/ClFDVariable.h
new file mode 100644
index 0000000000..326b339459
--- /dev/null
+++ b/libs/cassowary/cassowary/ClFDVariable.h
@@ -0,0 +1,126 @@
+// $Id$
+//
+// Cassowary Incremental Constraint Solver
+// Original Smalltalk Implementation by Alan Borning
+// This C++ Implementation by Greg J. Badros, <gjb@cs.washington.edu>
+// http://www.cs.washington.edu/homes/gjb
+// (C) 1998, 1999 Greg J. Badros and Alan Borning
+// See ../LICENSE for legal details regarding this software
+//
+// ClFDVariable.h
+
+#ifndef ClFDVariable_H
+#define ClFDVariable_H
+
+#if defined(HAVE_CONFIG_H) && !defined(CONFIG_H_INCLUDED) && !defined(CONFIG_INLINE_H_INCLUDED)
+#include <cassowary/config-inline.h>
+#define CONFIG_INLINE_H_INCLUDED
+#endif
+
+#include <cstdio>
+#include <map>
+#include <string>
+#include <list>
+#include "Cassowary.h"
+#include "ClAbstractVariable.h"
+
+using std::map;
+using std::list;
+using std::string;
+
+class ClFDVariable : public ClAbstractVariable {
+public:
+ typedef ClAbstractVariable super;
+
+#if 0 /* GJB:FIXME:: */
+ ClFDVariable(string name, FDNumber Value) :
+ ClAbstractVariable(name),
+ _value(Value),
+ _fSet(true),
+ _desired_value(Value),
+ _plfdnInitialDomain(0)
+ { }
+#endif
+
+ ClFDVariable(string name, FDNumber Value, const list<FDNumber> &initial_domain) :
+ ClAbstractVariable(name),
+ _value(Value),
+ _fSet(true),
+ _desired_value(Value),
+ _plfdnInitialDomain(new list<FDNumber>())
+ {
+ *_plfdnInitialDomain = initial_domain;
+ }
+
+ virtual bool IsFDVariable() const
+ { return true; }
+
+ // Return true if this a variable known outside the solver.
+ // (We need to give such variables a Value after solving is complete.)
+ virtual bool IsExternal() const
+ { return true; }
+
+#ifndef CL_NO_IO
+ // Prints a semi-descriptive representation to the stream, using the
+ // name if there is one, and otherwise the hash number of this
+ // object.
+ // EXAMPLE
+ // [x:10.0] -- name = "x", Value = 10.0
+ virtual ostream &PrintOn(ostream &xo) const;
+#endif
+
+ // Return the current Value I hold.
+ Number Value() const
+ { return _value; }
+
+ // Round the Value to an integer and return it
+ int IntValue() const
+ { return _value; }
+
+ // change the Value held -- should *not* use this if the variable is
+ // in a solver -- instead use AddEditVar() and SuggestValue() interface
+ void SetValue(FDNumber Value)
+ { _value = Value; }
+
+ // permit overriding in subclasses in case something needs to be
+ // done when the Value is changed by the solver
+ // may be called when the Value hasn't actually changed -- just
+ // means the solver is setting the external variable
+ virtual void ChangeValue(FDNumber Value)
+ { _value = Value; }
+
+ virtual bool FIsSet()
+ { return _fSet; }
+
+ virtual void SetFIsSet(bool f)
+ { _fSet = f; }
+
+ virtual FDNumber DesiredValue() const
+ { return _desired_value; }
+
+ virtual const list<FDNumber> *PlfdnDomain() const
+ { return _plfdnInitialDomain; }
+
+protected:
+
+ // similar to SetValue -- see caveat above -- made private for now
+ // since it's probably the wrong thing and is too easy to invoke
+ FDNumber operator=(FDNumber Value)
+ { _value = Value; return Value; }
+
+ // Copy constructor left undefined since we want to
+ // outlaw passing by Value! Will get a link error if you
+ // try to use within ClFDVariable.c, compile-time error everywhere else
+ ClFDVariable(const ClFDVariable &);
+
+ FDNumber _value;
+
+ // has the _value been set? Used during solves.
+ bool _fSet;
+
+ FDNumber _desired_value;
+
+ list<FDNumber> *_plfdnInitialDomain;
+};
+
+#endif