blob: 29a564136b84b16ba2e87711a3d04c5f24089ffd (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
|
package com.modulus.qbar.integration;
import java.util.Arrays;
import java.util.List;
import com.modulus.common.collections.MArrays;
import com.modulus.qbar.core.QBObject;
import com.modulus.qbar.core.interpreter.QBInterpreter;
import com.modulus.qbar.core.primitive.QBChar;
import com.modulus.qbar.core.primitive.QBDouble;
import com.modulus.qbar.core.primitive.QBInt;
import com.modulus.qbar.lang.QBArrayList;
import com.modulus.qbar.lang.QBList;
import com.modulus.qbar.lang.QBMaybe;
public class QBWrappedObject extends QBObject{
/**
*
*/
private static final long serialVersionUID = 400259956418357800L;
private Object wrapped;
private QBWrappedObject(Object wrapped) {
super( QBWrappedClass.wrapClass(wrapped.getClass(), QBInterpreter.instance().getGlobalNamespace()) );
this.wrapped = wrapped;
}
public Object getWrapped(){
return wrapped;
}
public static QBObject wrap(Object invoke) {
if(invoke == null){
return new QBMaybe.Maybe(null);
}
if(invoke instanceof QBObject) {
return (QBObject) invoke;
}
if ( invoke instanceof Object[] ){
return fromList(
Arrays.asList((Object[]) invoke)
);
}
if ( invoke instanceof byte[] ){
List<Byte> lst = MArrays.asList((byte[]) invoke);
return fromList(
lst
);
}
if ( invoke instanceof int[] ){
return fromList(
MArrays.asList((int[]) invoke)
);
}
if ( invoke instanceof short[] ){
return fromList(
MArrays.asList((short[]) invoke)
);
}
if ( invoke instanceof long[] ){
return fromList(
MArrays.asList((long[]) invoke)
);
}
if ( invoke instanceof boolean[] ){
return fromList(
MArrays.asList((boolean[]) invoke)
);
}
if ( invoke instanceof char[] ){
return fromList(
MArrays.asList((char[]) invoke)
);
}
if ( invoke instanceof double[] ){
return fromList(
MArrays.asList((double[]) invoke)
);
}
if ( invoke instanceof float[] ){
return fromList(
MArrays.asList((float[]) invoke)
);
}
if( invoke instanceof List<?> ){
return fromList( (List<?>) invoke );
}
if(invoke instanceof Double || invoke instanceof Float){
return new QBDouble(((Number) invoke).doubleValue());
}
if(invoke instanceof Number){
return new QBInt(((Number) invoke).intValue());
}
if(invoke instanceof Boolean){
return new QBInt(((Boolean) invoke) ? 1 : 0);
}
if(invoke instanceof Character){
return new QBChar((Character)invoke);
}
return new QBWrappedObject(invoke);
}
public static long timeSpent = 0;
private static QBObject fromList(final List<?> invoke) {
QBList tmp = new QBList() {
@Override
public double size() {
return invoke.size();
}
@Override
public void remove(QBObject obj) {
invoke.remove(obj);
}
@Override
public QBList realSubList(int off, int len) {
return (QBList) QBWrappedObject.wrap( invoke.subList(off, off+len) );
}
@Override
public void insert(int idx, QBObject obj) {
}
@Override
public QBObject get(int idx) {
return QBWrappedObject.wrap( invoke.get(idx) );
}
@Override
public QBObject add(QBObject obj) {
// TODO Auto-generated method stub
return null;
}
};
// timeSpent += (t2 - t1);
return tmp;
}
public String toString(){
return wrapped.toString();
}
}
|