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 }