1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one
3  * or more contributor license agreements. See the NOTICE file
4  * distributed with this work for additional information
5  * regarding copyright ownership. The ASF licenses this file
6  * to you under the Apache License, Version 2.0 (the
7  * "License"); you may not use this file except in compliance
8  * with the License. You may obtain a copy of the License at
9  *
10  *   http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing,
13  * software distributed under the License is distributed on an
14  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15  * KIND, either express or implied. See the License for the
16  * specific language governing permissions and limitations
17  * under the License.
18  */
19 package org.apache.thrift;
20 
21 import java.util.Vector;
22 import java.util.Hashtable;
23 import java.util.Enumeration;
24 
25 public class TBaseHelper {
26 
compareTo(boolean a, boolean b)27     public static int compareTo(boolean a, boolean b) {
28          return (a == b) ? 0 : (a ? 1 : -1);
29 
30 
31     }
compareTo(Boolean a, Boolean b)32      public static int compareTo(Boolean a, Boolean b) {
33          return (a.booleanValue() == b.booleanValue()) ? 0 : (a.booleanValue() ? 1 : -1);
34 
35 
36     }
compareTo(Boolean a, boolean b)37      public static int compareTo(Boolean a, boolean b) {
38          return (a.booleanValue() == b) ? 0 : (a.booleanValue() ? 1 : -1);
39 
40 
41     }
42 
booleanValueOf(boolean b)43     public static Boolean booleanValueOf(boolean b) {
44         return (b ? Boolean.TRUE : Boolean.FALSE);
45     }
46 
compareTo(byte a, byte b)47     public static int compareTo(byte a, byte b) {
48         if (a < b) {
49             return -1;
50         } else if (b < a) {
51             return 1;
52         } else {
53             return 0;
54         }
55     }
56 
compareTo(short a, short b)57     public static int compareTo(short a, short b) {
58         if (a < b) {
59             return -1;
60         } else if (b < a) {
61             return 1;
62         } else {
63             return 0;
64         }
65     }
66 
compareTo(int a, int b)67     public static int compareTo(int a, int b) {
68         if (a < b) {
69             return -1;
70         } else if (b < a) {
71             return 1;
72         } else {
73             return 0;
74         }
75     }
76 
compareTo(long a, long b)77     public static int compareTo(long a, long b) {
78         if (a < b) {
79             return -1;
80         } else if (b < a) {
81             return 1;
82         } else {
83             return 0;
84         }
85     }
86 
compareTo(double a, double b)87     public static int compareTo(double a, double b) {
88         if (a < b) {
89             return -1;
90         } else if (b < a) {
91             return 1;
92         } else {
93             return 0;
94         }
95     }
96 
compareTo(String a, String b)97     public static int compareTo(String a, String b) {
98         return a.compareTo(b);
99     }
100 
compareTo(byte[] a, byte[] b)101     public static int compareTo(byte[] a, byte[] b) {
102         int sizeCompare = compareTo(a.length, b.length);
103         if (sizeCompare != 0) {
104             return sizeCompare;
105         }
106         for (int i = 0; i < a.length; i++) {
107             int byteCompare = compareTo(a, b);
108             if (byteCompare != 0) {
109                 return byteCompare;
110             }
111         }
112         return 0;
113     }
114 
compareTo(Object a, Object b)115     public static int compareTo(Object a, Object b) {
116         if (a instanceof Vector) {
117             return compareTo((Vector)a, (Vector)b);
118         } if (a instanceof Hashtable) {
119             return compareTo((Hashtable)a, (Hashtable)b);
120         } else {
121             return ((TBase)a).compareTo(b);
122         }
123     }
124 
compareTo(Vector a, Vector b)125     public static int compareTo(Vector a, Vector b) {
126         int lastComparison = compareTo(a.size(), b.size());
127         if (lastComparison != 0) {
128             return lastComparison;
129         }
130         for (int i = 0; i < a.size(); i++) {
131             Object oA = a.elementAt(i);
132             Object oB = b.elementAt(i);
133             lastComparison = compareTo(oA, oB);
134             if (lastComparison != 0) {
135                 return lastComparison;
136             }
137 
138         }
139         return 0;
140     }
141 
compareTo(Hashtable a, Hashtable b)142     public static int compareTo(Hashtable a, Hashtable b) {
143         int lastComparison = compareTo(a.size(), b.size());
144         if (lastComparison != 0) {
145             return lastComparison;
146         }
147         Enumeration enumA = a.keys();
148         Enumeration enumB = b.keys();
149         while (lastComparison == 0 && enumA.hasMoreElements()) {
150             Object keyA = enumA.nextElement();
151             Object keyB = enumB.nextElement();
152             lastComparison = compareTo(keyA, keyB);
153             if (lastComparison == 0) {
154                 lastComparison = compareTo(a.get(keyA), b.get(keyB));
155             }
156         }
157         return lastComparison;
158     }
159 
compareTo(TEnum a, TEnum b)160     public static int compareTo(TEnum a, TEnum b) {
161         return compareTo(a.getValue(), b.getValue());
162     }
163 
164     /*
165     public static int compareTo(List a, List b) {
166         int lastComparison = compareTo(a.size(), b.size());
167         if (lastComparison != 0) {
168             return lastComparison;
169         }
170         for (int i = 0; i < a.size(); i++) {
171             Object oA = a.get(i);
172             Object oB = b.get(i);
173             if (oA instanceof List) {
174                 lastComparison = compareTo((List) oA, (List) oB);
175             } else {
176                 lastComparison = compareTo((Comparable) oA, (Comparable) oB);
177             }
178             if (lastComparison != 0) {
179                 return lastComparison;
180             }
181         }
182         return 0;
183     }
184      */
185 
toString(byte[] bytes, StringBuffer sb)186   public static void toString(byte[] bytes, StringBuffer sb) {
187     toString(bytes, 0, bytes.length, sb);
188   }
189 
toString(byte[] buf, int arrayOffset, int origLimit, StringBuffer sb)190   public static void toString(byte[] buf, int arrayOffset, int origLimit, StringBuffer sb) {
191     int limit = (origLimit - arrayOffset > 128) ? arrayOffset + 128 : origLimit;
192 
193     for (int i = arrayOffset; i < limit; i++) {
194       if (i > arrayOffset) {
195         sb.append(" ");
196       }
197       sb.append(paddedByteString(buf[i]));
198     }
199     if (origLimit != limit) {
200       sb.append("...");
201     }
202   }
203 
paddedByteString(byte b)204   public static String paddedByteString(byte b) {
205     int extended = (b | 0x100) & 0x1ff;
206     return Integer.toHexString(extended).toUpperCase().substring(1);
207   }
208 
209 }
210