/**
*   Copyright: © 2012-2014 Anton Gushcha
*   License: Subject to the terms of the MIT license, as written in the included LICENSE file.
*   Authors:  NCrashed <ncrashed@gmail.com>,
*             LeMarwin <lemarwin42@gmail.com>,
*             Nazgull09 <nazgull90@gmail.com>
*/
module devol.argument;

import devol.type;

abstract class Argument
{
	this(Type type)
	{
		pType = type;
	}
	
	@property Type type()
	{
		assert(pType);
		return pType;
	}
	
	@property string tostring(uint depth=0)
	{
		return "";
	}
	
	@property ulong children()
	{
		return 1;
	}
	
	@property ulong leafs()
	{
		return 1;
	}
	
	private Type pType; 
	
	void randomChange();
	void randomChange(string maxChange);
	@property Argument dup();
}