KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jacorb > trading > constraint > ValueType


1
2 // Copyright (C) 1998-1999
3
// Object Oriented Concepts, Inc.
4

5 // **********************************************************************
6
//
7
// Copyright (c) 1997
8
// Mark Spruiell (mark@intellisoft.com)
9
//
10
// See the COPYING file for more information
11
//
12
// **********************************************************************
13

14 package org.jacorb.trading.constraint;
15
16
17 public class ValueType
18 {
19   private int m_id;
20   private boolean m_sequence;
21   private static String JavaDoc[] s_typeNames = {
22     "BOOLEAN",
23     "SHORT",
24     "USHORT",
25     "LONG",
26     "ULONG",
27     "FLOAT",
28     "DOUBLE",
29     "CHAR",
30     "STRING",
31     "OTHER"
32   };
33
34   // This array must be in the same order as the enumeration values
35
private static String JavaDoc[] s_longTypeNames = {
36     "boolean",
37     "short",
38     "unsigned short",
39     "long",
40     "unsigned long",
41     "float",
42     "double",
43     "char",
44     "string",
45     "other"
46   };
47
48   public static final int BOOLEAN = 0;
49   public static final int SHORT = 1;
50   public static final int USHORT = 2;
51   public static final int LONG = 3;
52   public static final int ULONG = 4;
53   public static final int FLOAT = 5;
54   public static final int DOUBLE = 6;
55   public static final int CHAR = 7;
56   public static final int STRING = 8;
57   public static final int OTHER = 9;
58   public static final int NUMTYPES = OTHER + 1;
59
60
61   public ValueType()
62   {
63     this(OTHER, false);
64   }
65
66
67   public ValueType(int id)
68   {
69     this(id, false);
70   }
71
72
73   public ValueType(int id, boolean sequence)
74   {
75     m_id = id;
76     m_sequence = sequence;
77   }
78
79
80   public ValueType(ValueType type)
81   {
82     m_id = type.m_id;
83     m_sequence = type.m_sequence;
84   }
85
86
87   public boolean equals(ValueType type)
88   {
89     return (m_id == type.m_id && m_sequence == type.m_sequence);
90   }
91
92
93   public int getId()
94   {
95     return m_id;
96   }
97
98
99   public boolean isSequence()
100   {
101     return m_sequence;
102   }
103
104
105   public boolean isNumber()
106   {
107     return checkNumeric(m_id);
108   }
109
110
111   public String JavaDoc getTypeName()
112   {
113     return s_typeNames[m_id];
114   }
115
116
117   public static String JavaDoc getTypeName(int id)
118   {
119     return s_typeNames[id];
120   }
121
122
123   public String JavaDoc getLongTypeName()
124   {
125     return s_longTypeNames[m_id];
126   }
127
128
129   public static String JavaDoc getLongTypeName(int id)
130   {
131     return s_longTypeNames[id];
132   }
133
134
135   public String JavaDoc toString()
136   {
137     String JavaDoc result;
138     if (m_sequence)
139       result = "sequence<" + getLongTypeName() + ">";
140     else
141       result = getLongTypeName();
142     return result;
143   }
144
145
146   public static boolean isCompatible(int id1, int id2)
147   {
148     return (s_promoteTable[id1][id2] != -1);
149   }
150
151
152   public static int promote(int id1, int id2)
153   {
154     int result = s_promoteTable[id1][id2];
155
156     return result;
157   }
158
159
160   protected boolean checkNumeric(int id)
161   {
162     boolean result = (id != STRING && id != OTHER && id != BOOLEAN);
163     return result;
164   }
165
166
167     // this lookup table defines the compatibility and promotion
168
// characteristics of each type; a value of -1 means the types
169
// are not compatible, otherwise the table should contain the
170
// type to which both types should be promoted
171

172   private static int s_promoteTable[][] = {
173
174       // BOOLEAN
175
{
176       BOOLEAN, // BOOLEAN
177
-1, // SHORT
178
-1, // USHORT
179
-1, // LONG
180
-1, // ULONG
181
-1, // FLOAT
182
-1, // DOUBLE
183
-1, // CHAR
184
-1, // STRING
185
-1 // OTHER
186
},
187
188
189       // SHORT
190
{
191       -1, // BOOLEAN
192
LONG, // SHORT
193
LONG, // USHORT
194
LONG, // LONG
195
ULONG, // ULONG
196
FLOAT, // FLOAT
197
DOUBLE, // DOUBLE
198
-1, // CHAR
199
-1, // STRING
200
-1 // OTHER
201
},
202
203
204       // USHORT
205
{
206       -1, // BOOLEAN
207
LONG, // SHORT
208
LONG, // USHORT
209
LONG, // LONG
210
ULONG, // ULONG
211
FLOAT, // FLOAT
212
DOUBLE, // DOUBLE
213
-1, // CHAR
214
-1, // STRING
215
-1 // OTHER
216
},
217
218       // LONG
219
{
220       -1, // BOOLEAN
221
LONG, // SHORT
222
LONG, // USHORT
223
LONG, // LONG
224
ULONG, // ULONG
225
FLOAT, // FLOAT
226
DOUBLE, // DOUBLE
227
-1, // CHAR
228
-1, // STRING
229
-1 // OTHER
230
},
231
232       // ULONG
233
{
234       -1, // BOOLEAN
235
ULONG, // SHORT
236
ULONG, // USHORT
237
ULONG, // LONG
238
ULONG, // ULONG
239
FLOAT, // FLOAT
240
DOUBLE, // DOUBLE
241
-1, // CHAR
242
-1, // STRING
243
-1 // OTHER
244
},
245
246       // FLOAT
247
{
248       -1, // BOOLEAN
249
FLOAT, // SHORT
250
FLOAT, // USHORT
251
FLOAT, // LONG
252
FLOAT, // ULONG
253
FLOAT, // FLOAT
254
DOUBLE, // DOUBLE
255
-1, // CHAR
256
-1, // STRING
257
-1 // OTHER
258
},
259
260       // DOUBLE
261
{
262       -1, // BOOLEAN
263
DOUBLE, // SHORT
264
DOUBLE, // USHORT
265
DOUBLE, // LONG
266
DOUBLE, // ULONG
267
DOUBLE, // FLOAT
268
DOUBLE, // DOUBLE
269
-1, // CHAR
270
-1, // STRING
271
-1 // OTHER
272
},
273
274       // CHAR
275
{
276       -1, // BOOLEAN
277
-1, // SHORT
278
-1, // USHORT
279
-1, // LONG
280
-1, // ULONG
281
-1, // FLOAT
282
-1, // DOUBLE
283
CHAR, // CHAR
284
STRING, // STRING
285
-1 // OTHER
286
},
287
288       // STRING
289
{
290       -1, // BOOLEAN
291
-1, // SHORT
292
-1, // USHORT
293
-1, // LONG
294
-1, // ULONG
295
-1, // FLOAT
296
-1, // DOUBLE
297
STRING, // CHAR
298
STRING, // STRING
299
-1 // OTHER
300
},
301
302       // OTHER
303
{
304       -1, // BOOLEAN
305
-1, // SHORT
306
-1, // USHORT
307
-1, // LONG
308
-1, // ULONG
309
-1, // FLOAT
310
-1, // DOUBLE
311
-1, // CHAR
312
-1, // STRING
313
-1 // OTHER
314
}
315
316   };
317
318
319   /********************
320   public static void main(String[] args)
321   {
322     int i;
323     int id;
324     ValueType[] types = new ValueType[ValueType.NUMTYPES];
325     for (i = 0; i < ValueType.NUMTYPES; i++)
326       types[i] = new ValueType(i);
327
328     for (i = 0; i < ValueType.NUMTYPES; i++)
329       System.out.println("Type = " + types[i]);
330     System.out.println();
331
332     for (i = 0; i < ValueType.NUMTYPES; i++) {
333       for (int j = 0; j < ValueType.NUMTYPES; j++) {
334         System.out.print("Types " + types[i].getLongTypeName() + " and " +
335           types[j].getLongTypeName() + " are ");
336
337         if (ValueType.isCompatible(types[i].getId(), types[j].getId())) {
338           id = ValueType.promote(types[i].getId(), types[j].getId());
339           System.out.println("compatible (would be promoted to " +
340             ValueType.getLongTypeName(id) + ")");
341         }
342         else
343           System.out.println("not compatible.");
344       }
345       System.out.println();
346     }
347   }
348   ********************/

349 }
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
Popular Tags