module cassowary.AbstractVariable;

import std.conv;
import cassowary.LinearExpression;

abstract class ClAbstractVariable
{
	this(string theName)
	{
		//hash_code = iVariableNumber;
		name = theName;
		iVariableNumber++;
	}

	this()
	{
		//hash_code = iVariableNumber;
		name = "v" ~ iVariableNumber.to!string();
		iVariableNumber++;
	}

	this(long varnumber, string prefix)
	{
		//hash_code = iVariableNumber;
		name = prefix ~ varnumber.to!string();
		iVariableNumber++;
	}

	bool isDummy() const
	{
		return false;
	}

	abstract bool isExternal() const;

	abstract bool isPivotable() const;

	abstract bool isRestricted() const;

	abstract override string toString() const;

	static int numCreated()
	{
		return iVariableNumber;
	}

	string name;

	private static int iVariableNumber;
}