// 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 Param extends _EquationMember {
  final Variable variable;
  dynamic context;

  Param([double value = 0.0]) : variable = new Variable(value) {
    variable._owner = this;
  }

  Param.withContext(ctx, [double value = 0.0])
      : variable = new Variable(value),
        context = ctx {
    variable._owner = this;
  }

  bool get isConstant => false;

  double get value => variable.value;

  String get name => variable.name;
  set name(String name) { variable.name = name; }

  Expression asExpression() => new Expression([new Term(variable, 1.0)], 0.0);
}
