blob: 2443c0dbe9ae626c10ea2cff0a8a0a29d9bc946b [file]
// Copyright (c) 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
part of cassowary;
class ConstantMember extends EquationMember {
double value = 0.0;
ConstantMember(this.value);
Expression _asExpression() => new Expression([], this.value);
Constraint operator >=(EquationMember m) => _asExpression() >= m;
Constraint operator <=(EquationMember m) => _asExpression() <= m;
operator ==(EquationMember m) => _asExpression() == m;
Expression operator +(EquationMember m) {
if (m is ConstantMember) {
return new Expression([], this.value + m.value);
}
if (m is Variable) {
return new Expression([new Term(m, 1.0)], this.value);
}
if (m is Term) {
return new Expression([m], this.value);
}
if (m is Expression) {
return new Expression(new List.from(m.terms), this.value + m.constant);
}
assert(false);
return null;
}
Expression operator -(EquationMember m) {
if (m is ConstantMember) {
return new Expression([], this.value - m.value);
}
if (m is Variable) {
return new Expression([new Term(m, -1.0)], this.value);
}
if (m is Term) {
return new Expression([new Term(m.variable, -m.coefficient)], this.value);
}
if (m is Expression) {
var negatedTerms = m.terms.fold(new List<Term>(), (list, term) => list
..add(new Term(term.variable, -term.coefficient)));
return new Expression(negatedTerms, this.value - m.constant);
}
assert(false);
return null;
}
EquationMember operator *(double m) {
return new ConstantMember(this.value * m);
}
EquationMember operator /(double m) {
return new ConstantMember(this.value / m);
}
}
ConstantMember CM(num value) {
return new ConstantMember(value);
}