1 /** 2 * Copyright: © 2012-2014 Anton Gushcha 3 * License: Subject to the terms of the MIT license, as written in the included LICENSE file. 4 * Authors: NCrashed <ncrashed@gmail.com>, 5 * LeMarwin <lemarwin42@gmail.com>, 6 * Nazgull09 <nazgull90@gmail.com> 7 */ 8 module devol.std.argpod; 9 10 import std.conv; 11 import std.random; 12 13 import devol.typemng; 14 15 class ArgPod(T) : Argument 16 { 17 this() 18 { 19 super( TypeMng.getSingleton().getType("Type"~T.stringof) ); 20 } 21 22 ref ArgPod!T opAssign(Argument val) 23 { 24 auto apod = cast(ArgPod!T)(val); 25 if (apod is null) return this; 26 27 mVal = apod.mVal; 28 return this; 29 } 30 31 ref ArgPod!T opAssign(T val) 32 { 33 mVal = val; 34 return this; 35 } 36 37 override @property string tostring(uint depth=0) 38 { 39 return to!string(mVal); 40 } 41 42 @property T val() 43 { 44 return mVal; 45 } 46 47 @property T value() 48 { 49 return mVal; 50 } 51 52 override void randomChange() 53 { 54 static if (!is(T == bool)) 55 { 56 mVal = uniform!"[]"(-mVal.max, mVal.max); 57 } else 58 { 59 mVal = uniform!"[]"(0, 1) != 0; 60 } 61 } 62 63 override void randomChange(string maxChange) 64 { 65 static if (!is(T == bool)) 66 { 67 T ch; 68 try 69 { 70 ch = to!T(maxChange); 71 } catch( Exception e ) 72 { 73 return; 74 } 75 76 mVal = uniform!"[]"(cast(T)(mVal-ch), cast(T)(mVal+ch)); 77 } else 78 { 79 mVal = uniform!"[]"(0, 1) != 0; 80 } 81 } 82 83 override @property Argument dup() 84 { 85 auto darg = new ArgPod!T(); 86 darg.mVal = mVal; 87 return darg; 88 } 89 90 protected T mVal; 91 }