Mercurial > projects > dwt2
annotate base/src/java/lang/wrappers.d @ 84:fcf926c91ca4
Added base classes
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Sat, 18 Apr 2009 09:25:29 +0200 |
parents | 2e09b0e6857a |
children | 536e43f63c81 |
rev | line source |
---|---|
23
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1 module java.lang.wrappers; |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2 |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
3 import java.lang.String; |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
4 |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
5 abstract class ArrayWrapper{ |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
6 } |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
7 abstract class ValueWrapper{ |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
8 } |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
9 |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
10 class ArrayWrapperT(T) : ArrayWrapper { |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
11 public T[] array; |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
12 public this( T[] data ){ |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
13 array = data; |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
14 } |
38 | 15 version(D_Version2){ |
16 static if( is(T == char )){ | |
17 public this( String data ){ | |
18 array = data.dup; | |
19 } | |
20 } | |
21 } | |
23
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
22 public override equals_t opEquals( Object o ){ |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
23 if( auto other = cast(ArrayWrapperT!(T))o){ |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
24 return array == other.array; |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
25 } |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
26 return false; |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
27 } |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
28 public override hash_t toHash(){ |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
29 return (typeid(T[])).getHash(&array); |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
30 } |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
31 static if( is( T == char )){ |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
32 public override String toString(){ |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
33 return cast(String)array; |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
34 } |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
35 } |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
36 } |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
37 |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
38 class ValueWrapperT(T) : ValueWrapper { |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
39 public T value; |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
40 public this( T data ){ |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
41 value = data; |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
42 } |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
43 static if( is(T==class) || is(T==interface)){ |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
44 public equals_t opEquals( Object other ){ |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
45 if( auto o = cast(ValueWrapperT!(T))other ){ |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
46 return value == o.value; |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
47 } |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
48 if( auto o = cast(T)other ){ |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
49 if( value is o ){ |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
50 return true; |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
51 } |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
52 if( value is null || o is null ){ |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
53 return false; |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
54 } |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
55 return value == o; |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
56 } |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
57 return false; |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
58 } |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
59 } |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
60 else{ |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
61 public equals_t opEquals( Object other ){ |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
62 if( auto o = cast(ValueWrapperT!(T))other ){ |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
63 return value == o.value; |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
64 } |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
65 return false; |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
66 } |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
67 public equals_t opEquals( T other ){ |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
68 return value == other; |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
69 } |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
70 } |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
71 public override hash_t toHash(){ |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
72 return (typeid(T)).getHash(&value); |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
73 } |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
74 } |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
75 |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
76 alias ArrayWrapperT!(byte) ArrayWrapperByte; |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
77 alias ArrayWrapperT!(int) ArrayWrapperInt; |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
78 alias ArrayWrapperT!(Object) ArrayWrapperObject; |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
79 alias ArrayWrapperT!(char) ArrayWrapperString; |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
80 alias ArrayWrapperT!(String) ArrayWrapperString2; |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
81 |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
82 Object[] StringArrayToObjectArray( String[] strs ){ |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
83 Object[] res = new Object[strs.length]; |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
84 foreach( idx, str; strs ){ |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
85 res[idx] = new ArrayWrapperString(cast(char[])str); |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
86 } |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
87 return res; |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
88 } |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
89 |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
90 String stringcast( Object o ){ |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
91 if( auto str = cast(ArrayWrapperString) o ){ |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
92 return cast(String)str.array; |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
93 } |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
94 return null; |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
95 } |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
96 String[] stringcast( Object[] objs ){ |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
97 String[] res = new String[](objs.length); |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
98 foreach( idx, obj; objs ){ |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
99 res[idx] = stringcast(obj); |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
100 } |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
101 return res; |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
102 } |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
103 ArrayWrapperString stringcast( String str ){ |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
104 return new ArrayWrapperString( cast(char[])str ); |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
105 } |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
106 ArrayWrapperString[] stringcast( String[] strs ){ |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
107 ArrayWrapperString[] res = new ArrayWrapperString[ strs.length ]; |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
108 foreach( idx, str; strs ){ |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
109 res[idx] = stringcast(str); |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
110 } |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
111 return res; |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
112 } |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
113 |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
114 String[] stringArrayFromObject( Object obj ){ |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
115 if( auto wrapper = cast(ArrayWrapperString2)obj ){ |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
116 return wrapper.array; |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
117 } |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
118 if( auto wrapper = cast(ArrayWrapperObject)obj ){ |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
119 String[] res = new String[ wrapper.array.length ]; |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
120 foreach( idx, o; wrapper.array ){ |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
121 if( auto swrapper = cast(ArrayWrapperString) o ){ |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
122 res[idx] = cast(String)swrapper.array; |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
123 } |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
124 } |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
125 return res; |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
126 } |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
127 assert( obj is null ); // if not null, it was the wrong type |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
128 return null; |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
129 } |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
130 |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
131 T[] arrayFromObject(T)( Object obj ){ |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
132 if( auto wrapper = cast(ArrayWrapperObject)obj ){ |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
133 T[] res = new T[ wrapper.array.length ]; |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
134 foreach( idx, o; wrapper.array ){ |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
135 res[idx] = cast(T)o; |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
136 } |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
137 return res; |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
138 } |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
139 assert( obj is null ); // if not null, it was the wrong type |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
140 return null; |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
141 } |
aaa0a4e20edf
Added missing files to repository
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
142 |
84 | 143 |