3 // Cassowary Incremental Constraint Solver
4 // Original Smalltalk Implementation by Alan Borning
5 // This C++ Implementation by Greg J. Badros, <gjb@cs.washington.edu>
6 // http://www.cs.washington.edu/homes/gjb
7 // (C) 1998, 1999 Greg J. Badros and Alan Borning
8 // See ../LICENSE for legal details regarding this software
10 // ClSymbolicWeight.cc
12 #include <cassowary/Cassowary.h>
13 #include <cassowary/ClSymbolicWeight.h>
17 #define CONFIG_H_INCLUDED
20 // Help g++ out, tell it to instantiate this
21 //template vector<double> &vector<double>::operator =(const vector<double> &);
23 ClSymbolicWeight::ClSymbolicWeight(unsigned int CLevels, double value) :
24 _values(CLevels, value)
26 assert(_values.size() == CLevels);
29 ClSymbolicWeight::ClSymbolicWeight(double w1, double w2, double w3)
31 _values.push_back(w1);
32 _values.push_back(w2);
33 _values.push_back(w3);
34 assert(_values.size() == 3);
37 ClSymbolicWeight::ClSymbolicWeight(const vector<double> &weights) :
42 ClSymbolicWeight::Zero()
44 static ClSymbolicWeight Zero(0.0, 0.0, 0.0);
50 ClSymbolicWeight::negated()
52 vector<double>::iterator it = _values.begin();
53 for (; it != _values.end(); ++it)
61 ClSymbolicWeight::MultiplyMe(Number n)
63 vector<double>::iterator it = _values.begin();
64 for (; it != _values.end(); ++it)
73 ClSymbolicWeight::DivideBy(Number n) const
76 ClSymbolicWeight clsw(0);
77 vector<double>::const_iterator i = _values.begin();
78 for (; i != _values.end(); ++i)
80 clsw.push_back(*i / n);
86 ClSymbolicWeight::addtoMe(const ClSymbolicWeight &cl)
88 assert(cl.CLevels() == CLevels());
90 vector<double>::iterator i1 = _values.begin();
91 vector<double>::const_iterator i2 = cl._values.begin();
92 for (; i1 != _values.end(); ++i1, ++i2)
100 ClSymbolicWeight::Subtract(const ClSymbolicWeight &cl) const
102 assert(cl.CLevels() == CLevels());
104 ClSymbolicWeight clsw(0);
105 vector<double>::const_iterator i1 = _values.begin();
106 vector<double>::const_iterator i2 = cl._values.begin();
107 for (; i1 != _values.end(); ++i1, ++i2)
109 clsw.push_back(*i1 - *i2);
116 ClSymbolicWeight::lessThan(const ClSymbolicWeight &cl) const
118 return _values < cl._values;
122 ClSymbolicWeight::lessThanOrEqual(const ClSymbolicWeight &cl) const
124 return _values <= cl._values;
128 ClSymbolicWeight::equal(const ClSymbolicWeight &cl) const
130 return _values == cl._values;
134 ClSymbolicWeight::greaterThan(const ClSymbolicWeight &cl) const
136 return _values > cl._values;
140 ClSymbolicWeight::greaterThanOrEqual(const ClSymbolicWeight &cl) const
142 return _values >= cl._values;
146 ClSymbolicWeight::isNegative() const
148 return _values < Zero()._values;