001    import java.io.DataInputStream;
002    import java.io.DataOutputStream;
003    import java.io.IOException;
004    import java.util.ArrayList;
005    import java.util.HashMap;
006    import java.util.List;
007    import java.util.Map;
008    import java.util.logging.Level;
009    import java.util.logging.Logger;
010    
011    public class gx {
012    
013        private static final HashMap a = new HashMap();
014        private final Map b = new HashMap();
015        private boolean c;
016    
017        public void a(int paramInt, Object paramObject) {
018            Integer localInteger = (Integer) a.get(paramObject.getClass());
019            if (localInteger == null) {
020                throw new IllegalArgumentException("Unknown data type: " + paramObject.getClass());
021            }
022            if (paramInt > 31) {
023                throw new IllegalArgumentException("Data value id is too big with " + paramInt + "! (Max is " + 31 + ")");
024            }
025            if (this.b.containsKey(Integer.valueOf(paramInt))) {
026                throw new IllegalArgumentException("Duplicate id value for " + paramInt + "!");
027            }
028    
029            b localb = new b(localInteger.intValue(), paramInt, paramObject);
030            this.b.put(Integer.valueOf(paramInt), localb);
031        }
032    
033        public byte a(int paramInt) {
034            Object a = ((b) this.b.get(Integer.valueOf(paramInt))).b();
035            if (a instanceof Integer)
036                return ((Integer)a).byteValue();
037            else
038                return ((Byte)a).byteValue();
039        }
040    
041        public void b(int paramInt, Object paramObject) {
042            b localb = (b) this.b.get(Integer.valueOf(paramInt));
043    
044            if (!paramObject.equals(localb.b())) {
045                localb.a(paramObject);
046                localb.a(true);
047                this.c = true;
048            }
049        }
050    
051        public boolean a() {
052            return this.c;
053        }
054    
055        public static void a(List paramList, DataOutputStream paramDataOutputStream) {
056            if (paramList != null) {
057                for (Object localb : paramList) {
058                    a(paramDataOutputStream, (b)localb);
059                }
060    
061            }
062            try {
063                paramDataOutputStream.writeByte(127);
064            } catch (IOException ex) {
065                Logger.getLogger(gx.class.getName()).log(Level.SEVERE, null, ex);
066            }
067        }
068    
069        public ArrayList b() {
070            ArrayList localArrayList = null;
071    
072            if (this.c) {
073                for (Object loca : this.b.values()) {
074                    b localb = (b)loca;
075                    if (localb.d()) {
076                        localb.a(false);
077    
078                        if (localArrayList == null) {
079                            localArrayList = new ArrayList();
080                        }
081                        localArrayList.add(localb);
082                    }
083                }
084            }
085            this.c = false;
086    
087            return localArrayList;
088        }
089    
090        public void a(DataOutputStream paramDataOutputStream) {
091            for (Object localb : this.b.values()) {
092                a(paramDataOutputStream, (b)localb);
093            }
094            try {
095                paramDataOutputStream.writeByte(127);
096            } catch (IOException ex) {
097                Logger.getLogger(gx.class.getName()).log(Level.SEVERE, null, ex);
098            }
099        }
100    
101        private static void a(DataOutputStream paramDataOutputStream, b paramb) {
102            try {
103                int i = (paramb.c() << 5 | paramb.a() & 0x1F) & 0xFF;
104                paramDataOutputStream.writeByte(i);
105                switch (paramb.c()) {
106                    case 0:
107                        paramDataOutputStream.writeByte(((Byte) paramb.b()).byteValue());
108                        break;
109                    case 1:
110                        paramDataOutputStream.writeShort(((Short) paramb.b()).shortValue());
111                        break;
112                    case 2:
113                        paramDataOutputStream.writeInt(((Integer) paramb.b()).intValue());
114                        break;
115                    case 3:
116                        paramDataOutputStream.writeFloat(((Float) paramb.b()).floatValue());
117                        break;
118                    case 4:
119                        paramDataOutputStream.writeUTF((String) paramb.b());
120                        break;
121                    case 5:
122                        jl localjl = (jl) paramb.b();
123                        paramDataOutputStream.writeShort(localjl.a().ba);
124                        paramDataOutputStream.writeByte(localjl.a);
125                        paramDataOutputStream.writeShort(localjl.h());
126                }
127            } catch (IOException ex) {
128                Logger.getLogger(gx.class.getName()).log(Level.SEVERE, null, ex);
129            }
130        }
131    
132        public static List a(DataInputStream paramDataInputStream) {
133            ArrayList localArrayList = null;
134            try {
135                int i = paramDataInputStream.readByte();
136                while (i != 127) {
137                    if (localArrayList == null) {
138                        localArrayList = new ArrayList();
139                    }
140                    int j = (i & 0xE0) >> 5;
141                    int k = i & 0x1F;
142                    b localb = null;
143                    switch (j) {
144                        case 0:
145                            localb = new b(j, k, Byte.valueOf(paramDataInputStream.readByte()));
146                            break;
147                        case 1:
148                            localb = new b(j, k, Short.valueOf(paramDataInputStream.readShort()));
149                            break;
150                        case 2:
151                            localb = new b(j, k, Integer.valueOf(paramDataInputStream.readInt()));
152                            break;
153                        case 3:
154                            localb = new b(j, k, Float.valueOf(paramDataInputStream.readFloat()));
155                            break;
156                        case 4:
157                            localb = new b(j, k, paramDataInputStream.readUTF());
158                            break;
159                        case 5:
160                            int m = paramDataInputStream.readShort();
161                            int n = paramDataInputStream.readByte();
162                            int i1 = paramDataInputStream.readShort();
163                            localb = new b(j, k, new jl(m, n, i1));
164                    }
165                    localArrayList.add(localb);
166                    i = paramDataInputStream.readByte();
167                }
168            } catch (IOException ex) {
169                Logger.getLogger(gx.class.getName()).log(Level.SEVERE, null, ex);
170            }
171            return localArrayList;
172        }
173    
174        static {
175            a.put(Byte.class, Integer.valueOf(0));
176            a.put(Short.class, Integer.valueOf(1));
177            a.put(Integer.class, Integer.valueOf(2));
178            a.put(Float.class, Integer.valueOf(3));
179            a.put(String.class, Integer.valueOf(4));
180            a.put(jl.class, Integer.valueOf(5));
181        }
182    }