Advertisement
Guest User

Untitled

a guest
Jul 21st, 2017
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.04 KB | None | 0 0
  1. package net.minecraft.server;
  2. import java.util.ArrayList;
  3. import java.util.Arrays;
  4.  
  5. public class LongHashset<V> extends LongHash<V> {
  6.     long values[][][] = new long[256][][];
  7.     int count = 0;
  8.    
  9.     public boolean isEmpty() {
  10.         return count == 0;
  11.     }
  12.    
  13.     public void add(int msw, int lsw) {
  14.         add(toLong(msw, lsw));
  15.     }
  16.  
  17.     public void add(long key) {
  18.         int mainIdx = (int) (key & 255);
  19.         int outerIdx = (int) ((key >> 32) & 255);
  20.         long outer[][] = values[mainIdx], inner[];
  21.         if(outer == null) values[mainIdx] = outer = new long[256][];
  22.         inner = outer[outerIdx];
  23.         if(inner == null) {
  24.             outer[outerIdx] = inner = new long[1];
  25.             inner[0] = key;
  26.             count++;
  27.         }
  28.         else {
  29.             int i;
  30.             for(i = 0; i < inner.length; i++) {
  31.                 if(inner[i] == key) {
  32.                     return;
  33.                 }
  34.             }
  35.             outer[0] = inner = Arrays.copyOf(inner, i+1);
  36.             inner[i] = key;
  37.             count++;
  38.         }
  39.     }
  40.    
  41.     public boolean containsKey(long key) {
  42.         int mainIdx = (int) (key & 255);
  43.         int outerIdx = (int) ((key >> 32) & 255);
  44.         long outer[][] = values[mainIdx], inner[];
  45.         if(outer == null) return false;
  46.         inner = outer[outerIdx];
  47.         if(inner == null) return false;
  48.         else {
  49.             for(long entry : inner) {
  50.                 if(entry == key) return true;
  51.             }
  52.             return false;
  53.         }
  54.     }
  55.    
  56.     public void remove(long key) {
  57.         long[][] outer = this.values[(int) (key & 255)];
  58.         if (outer == null) return;
  59.  
  60.         long[] inner = outer[(int) ((key >> 32) & 255)];
  61.         if (inner == null) return;
  62.        
  63.         int max = inner.length - 1;
  64.         for(int i = 0; i <= max; i++) {
  65.             if(inner[i] == key) {
  66.                 count--;
  67.                 if(i != max) {
  68.                     inner[i] = inner[max];
  69.                 }
  70.                 outer[(int) ((key >> 32) & 255)] = (max == 0 ? null : Arrays.copyOf(inner, max));
  71.                 return;
  72.             }
  73.         }
  74.     }
  75.    
  76.     public long popFirst() {
  77.         for(long[][] outer : values) {
  78.             if(outer == null) continue;
  79.             for(int i = 0; i < outer.length ; i++) {
  80.                 long[] inner = outer[i];
  81.                 if(inner == null) continue;
  82.                 count--;
  83.                 long ret = inner[inner.length - 1];
  84.                 outer[i] = Arrays.copyOf(inner, inner.length - 1);
  85.                 return ret;
  86.             }
  87.         }
  88.         return 0;
  89.     }
  90.  
  91.     public long[] keys() {
  92.         int index = 0;
  93.         long ret[] = new long[count];
  94.         for(long[][] outer : values) {
  95.             if(outer == null) continue;
  96.             for(long[] inner : outer) {
  97.                 if(inner == null) continue;
  98.                 for(long entry : inner) {
  99.                     ret[index++] = entry;
  100.                 }
  101.             }
  102.         }
  103.         return ret;
  104.     }
  105. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement