// Decompiled by Jad v1.5.8e. Copyright 2001 Pavel Kouznetsov. // Jad home page: http://www.geocities.com/kpdus/jad.html // Decompiler options: braces fieldsfirst space lnc package com.fasterxml.jackson.databind.util; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; public final class CompactStringObjectMap { private static final CompactStringObjectMap EMPTY = new CompactStringObjectMap(1, 0, new Object[4]); private final Object _hashArea[]; private final int _hashMask; private final int _spillCount; private CompactStringObjectMap(int i, int j, Object aobj[]) { _hashMask = i; _spillCount = j; _hashArea = aobj; } private final Object _find2(String s, int i, Object obj) { if (obj != null) goto _L2; else goto _L1 _L1: return null; _L2: int j = _hashMask + 1; i = (i >> 1) + j << 1; obj = _hashArea[i]; if (s.equals(obj)) { return _hashArea[i + 1]; } if (obj != null) { j = (j >> 1) + j << 1; int k = _spillCount; i = j; while (i < j + k) { obj = _hashArea[i]; if (obj == s || s.equals(obj)) { return _hashArea[i + 1]; } i += 2; } } if (true) goto _L1; else goto _L3 _L3: } public static CompactStringObjectMap construct(Map map) { if (map.isEmpty()) { return EMPTY; } int k1 = findSize(map.size()); int l1 = k1 - 1; Object aobj[] = new Object[((k1 >> 1) + k1) * 2]; int k = 0; Iterator iterator = map.entrySet().iterator(); map = ((Map) (aobj)); while (iterator.hasNext()) { java.util.Map.Entry entry = (java.util.Map.Entry)iterator.next(); String s = (String)entry.getKey(); int i2 = s.hashCode() & l1; int l = i2 + i2; Object obj = map; int i = l; int j = k; if (map[l] != null) { int i1 = (i2 >> 1) + k1 << 1; obj = map; i = i1; j = k; if (map[i1] != null) { int j1 = ((k1 >> 1) + k1 << 1) + k; k += 2; obj = map; i = j1; j = k; if (j1 >= map.length) { obj = ((Object) (Arrays.copyOf(map, map.length + 4))); j = k; i = j1; } } } obj[i] = s; obj[i + 1] = entry.getValue(); map = ((Map) (obj)); k = j; } return new CompactStringObjectMap(l1, k, map); } private static final int findSize(int i) { if (i > 5) goto _L2; else goto _L1 _L1: byte byte0 = 8; _L4: return byte0; _L2: if (i <= 12) { return 16; } int j = 32; do { byte0 = j; if (j >= i + (i >> 2)) { continue; } j += j; } while (true); if (true) goto _L4; else goto _L3 _L3: } public Object find(String s) { int i = s.hashCode() & _hashMask; int j = i << 1; Object obj = _hashArea[j]; if (obj == s || s.equals(obj)) { return _hashArea[j + 1]; } else { return _find2(s, i, obj); } } public List keys() { int j = _hashArea.length; ArrayList arraylist = new ArrayList(j >> 2); for (int i = 0; i < j; i += 2) { Object obj = _hashArea[i]; if (obj != null) { arraylist.add((String)obj); } } return arraylist; } }