1 module orelang.operator.ConvOperators; 2 import orelang.operator.IOperator, 3 orelang.Engine, 4 orelang.Value; 5 import std.algorithm, 6 std..string, 7 std.array, 8 std.conv; 9 10 /** 11 * convert number into string 12 */ 13 class numberToStringOperator : IOperator { 14 /** 15 * call 16 */ 17 public Value call(Engine engine, Value[] args) { 18 return new Value(engine.eval(args[0]).getNumeric.to!string); 19 } 20 } 21 22 /** 23 * convert char into number 24 */ 25 class charToNumberOperator : IOperator { 26 /** 27 * call 28 */ 29 public Value call(Engine engine, Value[] args) { 30 return new Value(engine.eval(args[0]).getString[0].to!double); 31 } 32 } 33 34 /** 35 * convert float into integer 36 */ 37 class floatToIntegerOperator : IOperator { 38 /** 39 * call 40 */ 41 public Value call(Engine engine, Value[] args) { 42 return new Value(engine.eval(args[0]).getNumeric.to!long.to!double); 43 } 44 } 45 46 /** 47 * convert ubytes into string 48 */ 49 class ubytesToStringOperator : IOperator { 50 /** 51 * call 52 */ 53 public Value call(Engine engine, Value[] args) { 54 Value[] array = engine.eval(args[0]).getArray; 55 ubyte[] ubytes; 56 57 foreach (elem; array) { 58 ubytes ~= elem.getUbyte; 59 } 60 61 return new Value(cast(string)ubytes); 62 } 63 } 64 65 /** 66 * convert ubytes into string 67 */ 68 class ubytesToIntegersOperator : IOperator { 69 /** 70 * call 71 */ 72 public Value call(Engine engine, Value[] args) { 73 Value[] array = engine.eval(args[0]).getArray; 74 Value[] ret; 75 76 77 foreach (elem; array) { 78 ret ~= new Value(elem.getUbyte.to!double); 79 } 80 81 return new Value(ret); 82 } 83 }