Skip to content

Instantly share code, notes, and snippets.

View mdakin's full-sized avatar

mdakin mdakin

  • Google
  • Zurich, Switzerland
View GitHub Profile
@mdakin
mdakin / COWTPHM.java
Last active October 24, 2017 15:41
Copy on write tiny perfect hash map
package org.antlr.v4.runtime.misc;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.antlr.v4.runtime.dfa.DFAState;
public class DFAStateEdgeCache {
private static final int DEFAULT_INITIAL_CAPACITY = 4;
@mdakin
mdakin / edgecache.java
Created October 24, 2017 14:39
PerfectEdgeCache
package org.antlr.v4.runtime.misc;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.atomic.AtomicReference;
import org.antlr.v4.runtime.dfa.DFAState;
public class DFAStateEdgeCache {
@mdakin
mdakin / IntMap.java
Created October 14, 2017 12:15
A simple IntMap
package zemberek.core.collections;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* A simple hashmap with integer keys and T values.
* implements open address linear probing algorithm.
* <p>
@mdakin
mdakin / gist:13450dfbee687fc4446899ae1c98baf0
Created September 15, 2017 09:05
instrumentation vs.
// Simple histogram
private static class Histogram {
static int[] DEFAULT_HISTOGRAM_BUCKETS =
{0, 1, 2, 3, 4, 5, 6, 8, 10, 12, 14, 16, 32, 64, 100, 200, 500, 1000, 10000, Integer.MAX_VALUE};
int[] buckets;
int[] counts;
double[] percents;
long total;
@mdakin
mdakin / gist:0c16200b5bc92599159776ca368ef929
Created September 11, 2017 13:06
Convert this to unit tests.
package foo;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
public class Main {
public static void main(String[] args) {
@mdakin
mdakin / gist:091d55b653a35257b1210b0895ce6c7d
Created September 11, 2017 12:01
Unnecessary optimization
package foo;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* A map like class that has integer keys and T values. Relatively fast and
* compact compared to default HashMap.
*
@mdakin
mdakin / SimpleIntMap.java
Last active September 11, 2017 13:04
Super simple int-T map
package foo;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* A map like class that has integer keys and T values. Relatively fast and
* compact compared to default HashMap. Implementation is open address
* linear probing with some heuristics on expansion limits.
package foo;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
/**
* A map like structure that has unsigned integer keys and T values.
*
package foo;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
/**
* A map like structure that has unsigned integer keys and T values.
*
@mdakin
mdakin / gist:1e84b4eeb2e5e5aec33fd5d809f4ced2
Created September 10, 2017 23:36
Benchmark results for antlr4 lexer on input with non ascii characters Base versus special <Uint,DFAState> hash map.
Benchmark system:
Ryzen 1700+ 3.4Ghz, 32GB Ram, 1 TB Samsung 960 Evo NVMe
Input Text: ~50MB Turkish text from a news site,
Total chars: 45,430,066 Ascii: 41,465,690
Ascii Percent: 91.27%
Base Antlr (128 slot static lookup table, slow path for rest)
Total tokens:12103250
Total time: 13741ms.