64 lines
1.3 KiB
D
64 lines
1.3 KiB
D
module otya.smilebasic.type;
|
|
enum ValueType : byte
|
|
{
|
|
Integer,
|
|
Double,
|
|
String,
|
|
Array,
|
|
IntegerArray,
|
|
DoubleArray,
|
|
StringArray,
|
|
}
|
|
struct Value
|
|
{
|
|
ValueType type;
|
|
union
|
|
{
|
|
int integerValue;
|
|
double doubleValue;
|
|
wstring stringValue;
|
|
int[] intArray;
|
|
}
|
|
this(int value)
|
|
{
|
|
this.type = ValueType.Integer;
|
|
integerValue = value;
|
|
}
|
|
this(double value)
|
|
{
|
|
this.type = ValueType.Double;
|
|
doubleValue = value;
|
|
}
|
|
this(wstring value)
|
|
{
|
|
this.type = ValueType.String;
|
|
stringValue = value;
|
|
}
|
|
void castOp(ValueType type)
|
|
{
|
|
switch(type)
|
|
{
|
|
case ValueType.Double:
|
|
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
bool boolValue()
|
|
{
|
|
switch(type)
|
|
{
|
|
case ValueType.Double:
|
|
return this.doubleValue != 0;
|
|
case ValueType.Integer:
|
|
return this.integerValue != 0;
|
|
case ValueType.String:
|
|
return true;//3.1現在では文字列はtrue(ただし!"A"などは動かない)
|
|
default:
|
|
//配列はtype mismatch
|
|
return false;
|
|
}
|
|
}
|
|
}
|