library;
import self as self;
import "dart:core" as core;

class DeltaBlue extends core::Object {
  synthetic constructor •() → void
    ;
  method run() → void
    ;
}
class Strength extends core::Object {
  final field core::int value;
  final field core::String name;
  const constructor •(core::int value, core::String name) → void
    ;
  method nextWeaker() → self::Strength
    ;
  static method stronger(self::Strength s1, self::Strength s2) → core::bool
    ;
  static method weaker(self::Strength s1, self::Strength s2) → core::bool
    ;
  static method weakest(self::Strength s1, self::Strength s2) → self::Strength
    ;
  static method strongest(self::Strength s1, self::Strength s2) → self::Strength
    ;
}
abstract class Constraint extends core::Object {
  final field self::Strength strength;
  const constructor •(self::Strength strength) → void
    ;
  abstract method isSatisfied() → core::bool;
  abstract method markUnsatisfied() → void;
  abstract method addToGraph() → void;
  abstract method removeFromGraph() → void;
  abstract method chooseMethod(core::int mark) → void;
  abstract method markInputs(core::int mark) → void;
  abstract method inputsKnown(core::int mark) → core::bool;
  abstract method output() → self::Variable;
  abstract method execute() → void;
  abstract method recalculate() → void;
  method addConstraint() → void
    ;
  method satisfy(dynamic mark) → self::Constraint
    ;
  method destroyConstraint() → void
    ;
  method isInput() → core::bool
    ;
}
abstract class UnaryConstraint extends self::Constraint {
  final field self::Variable myOutput;
  field core::bool satisfied;
  constructor •(self::Variable myOutput, self::Strength strength) → void
    ;
  method addToGraph() → void
    ;
  method chooseMethod(core::int mark) → void
    ;
  method isSatisfied() → core::bool
    ;
  method markInputs(core::int mark) → void
    ;
  method output() → self::Variable
    ;
  method recalculate() → void
    ;
  method markUnsatisfied() → void
    ;
  method inputsKnown(core::int mark) → core::bool
    ;
  method removeFromGraph() → void
    ;
}
class StayConstraint extends self::UnaryConstraint {
  constructor •(self::Variable v, self::Strength str) → void
    ;
  method execute() → void
    ;
}
class EditConstraint extends self::UnaryConstraint {
  constructor •(self::Variable v, self::Strength str) → void
    ;
  method isInput() → core::bool
    ;
  method execute() → void
    ;
}
abstract class BinaryConstraint extends self::Constraint {
  field self::Variable v1;
  field self::Variable v2;
  field core::int direction;
  constructor •(self::Variable v1, self::Variable v2, self::Strength strength) → void
    ;
  method chooseMethod(core::int mark) → void
    ;
  method addToGraph() → void
    ;
  method isSatisfied() → core::bool
    ;
  method markInputs(core::int mark) → void
    ;
  method input() → self::Variable
    ;
  method output() → self::Variable
    ;
  method recalculate() → void
    ;
  method markUnsatisfied() → void
    ;
  method inputsKnown(core::int mark) → core::bool
    ;
  method removeFromGraph() → void
    ;
}
class ScaleConstraint extends self::BinaryConstraint {
  final field self::Variable scale;
  final field self::Variable offset;
  constructor •(self::Variable src, self::Variable scale, self::Variable offset, self::Variable dest, self::Strength strength) → void
    ;
  method addToGraph() → void
    ;
  method removeFromGraph() → void
    ;
  method markInputs(core::int mark) → void
    ;
  method execute() → void
    ;
  method recalculate() → void
    ;
}
class EqualityConstraint extends self::BinaryConstraint {
  constructor •(self::Variable v1, self::Variable v2, self::Strength strength) → void
    ;
  method execute() → void
    ;
}
class Variable extends core::Object {
  field core::List<self::Constraint> constraints;
  field self::Constraint determinedBy;
  field core::int mark;
  field self::Strength walkStrength;
  field core::bool stay;
  field core::int value;
  final field core::String name;
  constructor •(core::String name, core::int value) → void
    ;
  method addConstraint(self::Constraint c) → void
    ;
  method removeConstraint(self::Constraint c) → void
    ;
}
class Planner extends core::Object {
  field core::int currentMark;
  synthetic constructor •() → void
    ;
  method incrementalAdd(self::Constraint c) → void
    ;
  method incrementalRemove(self::Constraint c) → void
    ;
  method newMark() → core::int
    ;
  method makePlan(core::List<self::Constraint> sources) → self::Plan
    ;
  method extractPlanFromConstraints(core::List<self::Constraint> constraints) → self::Plan
    ;
  method addPropagate(self::Constraint c, core::int mark) → core::bool
    ;
  method removePropagateFrom(self::Variable out) → core::List<self::Constraint>
    ;
  method addConstraintsConsumingTo(self::Variable v, core::List<self::Constraint> coll) → void
    ;
}
class Plan extends core::Object {
  field core::List<self::Constraint> list;
  synthetic constructor •() → void
    ;
  method addConstraint(self::Constraint c) → void
    ;
  method size() → core::int
    ;
  method execute() → void
    ;
}
static const field dynamic REQUIRED;
static const field dynamic STRONG_PREFERRED;
static const field dynamic PREFERRED;
static const field dynamic STRONG_DEFAULT;
static const field dynamic NORMAL;
static const field dynamic WEAK_DEFAULT;
static const field dynamic WEAKEST;
static const field core::int NONE;
static const field core::int FORWARD;
static const field core::int BACKWARD;
static field self::Planner planner;
static method main() → dynamic
  ;
static method chainTest(core::int n) → void
  ;
static method projectionTest(core::int n) → void
  ;
static method change(self::Variable v, core::int newValue) → void
  ;
