Ignore:
Timestamp:
2013-04-07T17:07:27+02:00 (11 years ago)
Author:
akks
Message:

JOSM/ImageryCache: updated MapDB (no more deadlocks, Java 1.6 compatible), less crashes, multiple-JOSM support

File:
1 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/imagerycache/src/org/mapdb/DB.java

    r29363 r29484  
    8383        }else{
    8484            //create new map
    85             ret = new HTreeMap<K,V>(engine,true,Utils.RANDOM.nextInt(), defaultSerializer,null, null);
     85            ret = new HTreeMap<K,V>(engine,true,false,Utils.RANDOM.nextInt(), defaultSerializer,null, null);
    8686            nameDir.put(name, ret.rootRecid);
    8787        }
     
    9595     *
    9696     * @param name of map to create
     97     * @param keepCounter if counter should be kept, without counter updates are faster, but entire collection needs to be traversed to count items.
    9798     * @param keySerializer used to convert keys into/from binary form. Use null for default value.
    9899     * @param valueSerializer used to convert values into/from binary form. Use null for default value.
     
    103104     */
    104105    synchronized public <K,V> HTreeMap<K,V> createHashMap(
    105             String name, Serializer<K> keySerializer, Serializer<V> valueSerializer){
    106         checkNameNotExists(name);
    107         HTreeMap<K,V> ret = new HTreeMap<K,V>(engine, true,Utils.RANDOM.nextInt(), defaultSerializer, keySerializer, valueSerializer);
     106            String name, boolean keepCounter, Serializer<K> keySerializer, Serializer<V> valueSerializer){
     107        checkNameNotExists(name);
     108        HTreeMap<K,V> ret = new HTreeMap<K,V>(engine, true,keepCounter,Utils.RANDOM.nextInt(), defaultSerializer, keySerializer, valueSerializer);
    108109        nameDir.put(name, ret.rootRecid);
    109110        collections.put(name, new WeakReference<Object>(ret));
     
    130131        }else{
    131132            //create new map
    132             HTreeMap<K,Object> m = new HTreeMap<K,Object>(engine, false,Utils.RANDOM.nextInt(), defaultSerializer, null, null);
     133            HTreeMap<K,Object> m = new HTreeMap<K,Object>(engine, false,false, Utils.RANDOM.nextInt(), defaultSerializer, null, null);
    133134            ret = m.keySet();
    134135            nameDir.put(name, m.rootRecid);
     
    142143     * Creates new HashSet
    143144     * @param name of set to create
     145     * @param keepCounter if counter should be kept, without counter updates are faster, but entire collection needs to be traversed to count items.
    144146     * @param serializer used to convert keys into/from binary form. Use null for default value.
    145147     * @param <K> item type
    146148     * @throws IllegalArgumentException if name is already used
    147 
    148149     */
    149150   
    150     synchronized public <K> Set<K> createHashSet(String name, Serializer<K> serializer){
    151         checkNameNotExists(name);
    152         HTreeMap<K,Object> ret = new HTreeMap<K,Object>(engine, false,Utils.RANDOM.nextInt(), defaultSerializer, serializer, null);
     151    synchronized public <K> Set<K> createHashSet(String name, boolean keepCounter, Serializer<K> serializer){
     152        checkNameNotExists(name);
     153        HTreeMap<K,Object> ret = new HTreeMap<K,Object>(engine, false,keepCounter,Utils.RANDOM.nextInt(), defaultSerializer, serializer, null);
    153154        nameDir.put(name, ret.rootRecid);
    154155        Set<K> ret2 = ret.keySet();
     
    180181        }else{
    181182            //create new map
    182             ret = new BTreeMap<K,V>(engine,BTreeMap.DEFAULT_MAX_NODE_SIZE, true, false, defaultSerializer, null, null, null);
     183            ret = new BTreeMap<K,V>(engine,BTreeMap.DEFAULT_MAX_NODE_SIZE, true, false,false, defaultSerializer, null, null, null);
    183184            nameDir.put(name, ret.treeRecid);
    184185        }
     
    192193     * @param nodeSize maximal size of node, larger node causes overflow and creation of new BTree node. Use large number for small keys, use small number for large keys.
    193194     * @param valuesStoredOutsideNodes if true, values are stored outside of BTree nodes. Use 'true' if your values are large.
     195     * @param keepCounter if counter should be kept, without counter updates are faster, but entire collection needs to be traversed to count items.
    194196     * @param keySerializer used to convert keys into/from binary form. Use null for default value.
    195197     * @param valueSerializer used to convert values into/from binary form. Use null for default value.
     
    201203     */
    202204    synchronized public <K,V> BTreeMap<K,V> createTreeMap(
    203             String name, int nodeSize, boolean valuesStoredOutsideNodes,
     205            String name, int nodeSize, boolean valuesStoredOutsideNodes, boolean keepCounter,
    204206            BTreeKeySerializer<K> keySerializer, Serializer<V> valueSerializer, Comparator<K> comparator){
    205207        checkNameNotExists(name);
    206         BTreeMap<K,V> ret = new BTreeMap<K,V>(engine, nodeSize, true,valuesStoredOutsideNodes, defaultSerializer, keySerializer, valueSerializer, comparator);
     208        BTreeMap<K,V> ret = new BTreeMap<K,V>(engine, nodeSize, true,valuesStoredOutsideNodes, keepCounter,defaultSerializer, keySerializer, valueSerializer, comparator);
    207209        nameDir.put(name, ret.treeRecid);
    208210        collections.put(name, new WeakReference<Object>(ret));
     
    240242            //create new map
    241243            BTreeMap<K,Object> m =  new BTreeMap<K,Object>(engine,BTreeMap.DEFAULT_MAX_NODE_SIZE,
    242                     false, false, defaultSerializer, null, null, null);
     244                    false, false,false, defaultSerializer, null, null, null);
    243245            nameDir.put(name, m.treeRecid);
    244246            ret = m.keySet();
     
    253255     * @param name of set to create
    254256     * @param nodeSize maximal size of node, larger node causes overflow and creation of new BTree node. Use large number for small keys, use small number for large keys.
     257     * @param keepCounter if counter should be kept, without counter updates are faster, but entire collection needs to be traversed to count items.
    255258     * @param serializer used to convert keys into/from binary form. Use null for default value.
    256259     * @param comparator used to sort keys. Use null for default value. TODO delta packing
     
    259262     * @return
    260263     */
    261     synchronized public <K> NavigableSet<K> createTreeSet(String name, int nodeSize, BTreeKeySerializer<K> serializer, Comparator<K> comparator){
    262         checkNameNotExists(name);
    263         BTreeMap<K,Object> ret = new BTreeMap<K,Object>(engine, nodeSize, false, false, defaultSerializer, serializer, null, comparator);
     264    synchronized public <K> NavigableSet<K> createTreeSet(String name,int nodeSize, boolean keepCounter, BTreeKeySerializer<K> serializer, Comparator<K> comparator){
     265        checkNameNotExists(name);
     266        BTreeMap<K,Object> ret = new BTreeMap<K,Object>(engine, nodeSize, false, false, keepCounter, defaultSerializer, serializer, null, comparator);
    264267        nameDir.put(name, ret.treeRecid);
    265268        NavigableSet<K> ret2 = ret.keySet();
Note: See TracChangeset for help on using the changeset viewer.