Author: noctarius
Date: Sat Nov  3 22:03:07 2012
New Revision: 1405431

URL: http://svn.apache.org/viewvc?rev=1405431&view=rev
Log:
Some small performance optimizations

Added:
    
directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/VisitableMarshallerContext.java
      - copied, changed from r1405430, 
directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/InternalMarshallerContext.java
    
directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/util/FastIntMap.java
    
directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/util/FastLongMap.java
Modified:
    
directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/base/AbstractSerializerDefinition.java
    
directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/InternalClassDefinitionContainer.java
    
directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/InternalMarshallerContext.java
    
directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/InternalSerializationContext.java
    
directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/InternalSerializer.java
    
directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/InternalSerializerCreator.java
    
directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/generator/BytecodeMarshallerGenerator.java
    
directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/generator/MarshallerGenerator.java
    
directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/util/UnicodeUtil.java

Modified: 
directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/base/AbstractSerializerDefinition.java
URL: 
http://svn.apache.org/viewvc/directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/base/AbstractSerializerDefinition.java?rev=1405431&r1=1405430&r2=1405431&view=diff
==============================================================================
--- 
directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/base/AbstractSerializerDefinition.java
 (original)
+++ 
directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/base/AbstractSerializerDefinition.java
 Sat Nov  3 22:03:07 2012
@@ -43,6 +43,7 @@ import org.apache.directmemory.lightning
 import org.apache.directmemory.lightning.generator.DefinitionVisitor;
 import 
org.apache.directmemory.lightning.instantiator.ObjectInstantiatorFactory;
 import org.apache.directmemory.lightning.internal.InternalMarshallerContext;
+import org.apache.directmemory.lightning.internal.VisitableMarshallerContext;
 import 
org.apache.directmemory.lightning.internal.beans.introspection.AnnotatedTypeIntrospector;
 import org.apache.directmemory.lightning.internal.util.TypeUtil;
 import org.apache.directmemory.lightning.metadata.Attribute;
@@ -54,7 +55,7 @@ public abstract class AbstractSerializer
     implements SerializerDefinition
 {
 
-    private final InternalMarshallerContext marshallerContext = new 
InternalMarshallerContext();
+    private final VisitableMarshallerContext marshallerContext = new 
VisitableMarshallerContext();
 
     private final Set<SerializerDefinition> children = new 
HashSet<SerializerDefinition>();
 

Modified: 
directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/InternalClassDefinitionContainer.java
URL: 
http://svn.apache.org/viewvc/directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/InternalClassDefinitionContainer.java?rev=1405431&r1=1405430&r2=1405431&view=diff
==============================================================================
--- 
directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/InternalClassDefinitionContainer.java
 (original)
+++ 
directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/InternalClassDefinitionContainer.java
 Sat Nov  3 22:03:07 2012
@@ -31,12 +31,10 @@ import java.util.Map;
 import java.util.Set;
 
 import org.apache.directmemory.lightning.internal.util.ClassUtil;
+import org.apache.directmemory.lightning.internal.util.FastLongMap;
 import org.apache.directmemory.lightning.metadata.ClassDefinition;
 import org.apache.directmemory.lightning.metadata.ClassDefinitionContainer;
 
-import com.carrotsearch.hppc.LongObjectMap;
-import com.carrotsearch.hppc.LongObjectOpenHashMap;
-
 class InternalClassDefinitionContainer
     implements ClassDefinitionContainer, Serializable
 {
@@ -45,19 +43,20 @@ class InternalClassDefinitionContainer
 
     private final ClassDefinition[] classDefinitions;
 
-    private final LongObjectMap<ClassDefinition> classDefinitionsMappings;
+    //private final LongObjectMap<ClassDefinition> classDefinitionsMappings;
+    private final FastLongMap<ClassDefinition> classDefinitionsMappings;
 
     // Serialization
     private InternalClassDefinitionContainer( ClassDefinition[] 
classDefinitions )
     {
         this.classDefinitions = classDefinitions;
-        this.classDefinitionsMappings = new 
LongObjectOpenHashMap<ClassDefinition>();
+        this.classDefinitionsMappings = new FastLongMap<ClassDefinition>();
     }
 
     InternalClassDefinitionContainer( Set<ClassDefinition> classDefinitions )
     {
         this.classDefinitions = classDefinitions.toArray( new 
ClassDefinition[classDefinitions.size()] );
-        this.classDefinitionsMappings = new 
LongObjectOpenHashMap<ClassDefinition>( classDefinitions.size() );
+        this.classDefinitionsMappings = new FastLongMap<ClassDefinition>( 
classDefinitions.size() );
         initMappings( this.classDefinitions );
     }
 

Modified: 
directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/InternalMarshallerContext.java
URL: 
http://svn.apache.org/viewvc/directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/InternalMarshallerContext.java?rev=1405431&r1=1405430&r2=1405431&view=diff
==============================================================================
--- 
directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/InternalMarshallerContext.java
 (original)
+++ 
directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/InternalMarshallerContext.java
 Sat Nov  3 22:03:07 2012
@@ -19,12 +19,13 @@
 package org.apache.directmemory.lightning.internal;
 
 import java.lang.reflect.Type;
+import java.util.Collections;
+import java.util.Map;
 
 import org.apache.directmemory.lightning.Marshaller;
 import org.apache.directmemory.lightning.MarshallerContext;
-
-import com.carrotsearch.hppc.ObjectObjectMap;
-import com.carrotsearch.hppc.ObjectObjectOpenHashMap;
+import org.apache.directmemory.lightning.internal.util.FastIntMap;
+import org.apache.directmemory.lightning.internal.util.FastLongMap;
 
 public class InternalMarshallerContext
     implements MarshallerContext
@@ -32,22 +33,30 @@ public class InternalMarshallerContext
 
     private final MarshallerContext parentMarshallerContext;
 
-    private final ObjectObjectMap<Type, Marshaller> marshallers = new 
ObjectObjectOpenHashMap<Type, Marshaller>();
+    // private final ObjectObjectMap<Type, Marshaller> marshallers = new 
ObjectObjectOpenHashMap<Type, Marshaller>();
+    // private Map<Type, Marshaller> marshallers;
+    private final FastIntMap<Marshaller> marshallers;
 
-    public InternalMarshallerContext()
+    public InternalMarshallerContext( FastIntMap<Marshaller> marshallers )
     {
-        this( null );
+        this( null, marshallers );
     }
 
     public InternalMarshallerContext( MarshallerContext 
parentMarshallerContext )
     {
+        this( parentMarshallerContext, new FastIntMap<Marshaller>() );
+    }
+
+    public InternalMarshallerContext( MarshallerContext 
parentMarshallerContext, FastIntMap<Marshaller> marshallers )
+    {
         this.parentMarshallerContext = parentMarshallerContext;
+        this.marshallers = marshallers;
     }
 
     @Override
     public Marshaller getMarshaller( Type type )
     {
-        Marshaller marshaller = marshallers.get( type );
+        Marshaller marshaller = marshallers.get( System.identityHashCode( type 
) );
         if ( marshaller != null )
         {
             return marshaller;
@@ -64,11 +73,7 @@ public class InternalMarshallerContext
     @Override
     public void bindMarshaller( Type type, Marshaller marshaller )
     {
-        marshallers.put( type, marshaller );
+        marshallers.put( System.identityHashCode( type ), marshaller );
     }
 
-    public ObjectObjectMap<Type, Marshaller> getInternalMap()
-    {
-        return marshallers;
-    }
 }

Modified: 
directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/InternalSerializationContext.java
URL: 
http://svn.apache.org/viewvc/directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/InternalSerializationContext.java?rev=1405431&r1=1405430&r2=1405431&view=diff
==============================================================================
--- 
directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/InternalSerializationContext.java
 (original)
+++ 
directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/InternalSerializationContext.java
 Sat Nov  3 22:03:07 2012
@@ -30,6 +30,8 @@ import org.apache.directmemory.lightning
 import org.apache.directmemory.lightning.SerializationStrategy;
 import org.apache.directmemory.lightning.TypeBindableMarshaller;
 import 
org.apache.directmemory.lightning.instantiator.ObjectInstantiatorFactory;
+import org.apache.directmemory.lightning.internal.util.FastIntMap;
+import org.apache.directmemory.lightning.internal.util.FastLongMap;
 import org.apache.directmemory.lightning.internal.util.TypeUtil;
 import org.apache.directmemory.lightning.metadata.ClassDefinitionContainer;
 import org.apache.directmemory.lightning.metadata.ValueNullableEvaluator;
@@ -45,7 +47,7 @@ public class InternalSerializationContex
 
     private final LongObjectMap<Object> referencesUnmarshall;
 
-    private final MarshallerContext marshallerContext = new 
InternalMarshallerContext();
+    private final MarshallerContext marshallerContext;
 
     private final ClassDefinitionContainer classDefinitionContainer;
 
@@ -64,7 +66,7 @@ public class InternalSerializationContex
                                          MarshallerStrategy marshallerStrategy,
                                          ObjectInstantiatorFactory 
objectInstantiatorFactory,
                                          ValueNullableEvaluator 
valueNullableEvaluator,
-                                         Map<Class<?>, Marshaller> 
definedMarshallers )
+                                         FastIntMap<Marshaller> 
definedMarshallers )
     {
 
         this.classDefinitionContainer = classDefinitionContainer;
@@ -73,10 +75,12 @@ public class InternalSerializationContex
         this.objectInstantiatorFactory = objectInstantiatorFactory;
         this.valueNullableEvaluator = valueNullableEvaluator;
 
-        for ( Entry<Class<?>, Marshaller> entry : 
definedMarshallers.entrySet() )
-        {
-            this.marshallerContext.bindMarshaller( entry.getKey(), 
entry.getValue() );
-        }
+        this.marshallerContext = new InternalMarshallerContext( 
definedMarshallers );
+
+        /*
+         * for ( Entry<Class<?>, Marshaller> entry : 
definedMarshallers.entrySet() ) {
+         * this.marshallerContext.bindMarshaller( entry.getKey(), 
entry.getValue() ); }
+         */
 
         if ( serializationStrategy == SerializationStrategy.SizeOptimized )
         {

Modified: 
directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/InternalSerializer.java
URL: 
http://svn.apache.org/viewvc/directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/InternalSerializer.java?rev=1405431&r1=1405430&r2=1405431&view=diff
==============================================================================
--- 
directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/InternalSerializer.java
 (original)
+++ 
directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/InternalSerializer.java
 Sat Nov  3 22:03:07 2012
@@ -20,9 +20,11 @@ package org.apache.directmemory.lightnin
 
 import java.io.File;
 import java.io.IOException;
+import java.lang.reflect.Type;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.concurrent.atomic.AtomicReference;
 
 import org.apache.directmemory.lightning.ClassComparisonStrategy;
@@ -37,6 +39,7 @@ import org.apache.directmemory.lightning
 import 
org.apache.directmemory.lightning.instantiator.ObjectInstantiatorFactory;
 import 
org.apache.directmemory.lightning.internal.generator.BytecodeMarshallerGenerator;
 import 
org.apache.directmemory.lightning.internal.generator.MarshallerGenerator;
+import org.apache.directmemory.lightning.internal.util.FastIntMap;
 import org.apache.directmemory.lightning.logging.Logger;
 import org.apache.directmemory.lightning.metadata.ClassDefinition;
 import org.apache.directmemory.lightning.metadata.ClassDefinitionContainer;
@@ -61,7 +64,7 @@ class InternalSerializer
 
     private final SerializationStrategy serializationStrategy;
 
-    private final Map<Class<?>, Marshaller> definedMarshallers;
+    private final FastIntMap<Marshaller> definedMarshallers;
 
     private final MarshallerStrategy marshallerStrategy;
 
@@ -69,7 +72,7 @@ class InternalSerializer
 
     InternalSerializer( ClassDefinitionContainer classDefinitionContainer, 
SerializationStrategy serializationStrategy,
                         ClassComparisonStrategy classComparisonStrategy,
-                        Map<Class<?>, ClassDescriptor> classDescriptors, 
Map<Class<?>, Marshaller> marshallers,
+                        Map<Class<?>, ClassDescriptor> classDescriptors, 
Map<Type, Marshaller> marshallers,
                         ObjectInstantiatorFactory objectInstantiatorFactory, 
Logger logger,
                         MarshallerStrategy marshallerStrategy, File 
debugCacheDirectory,
                         ValueNullableEvaluator valueNullableEvaluator )
@@ -96,7 +99,12 @@ class InternalSerializer
             }
         }
 
-        this.definedMarshallers = marshallers;
+        this.definedMarshallers = new FastIntMap<Marshaller>( 
marshallers.size() );
+        for ( Entry<Type, Marshaller> entry : marshallers.entrySet() )
+        {
+            this.definedMarshallers.put( System.identityHashCode( 
entry.getKey() ), entry.getValue() );
+        }
+
         this.marshallerStrategy = marshallerStrategy;
         this.objectInstantiatorFactory = objectInstantiatorFactory;
     }

Modified: 
directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/InternalSerializerCreator.java
URL: 
http://svn.apache.org/viewvc/directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/InternalSerializerCreator.java?rev=1405431&r1=1405430&r2=1405431&view=diff
==============================================================================
--- 
directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/InternalSerializerCreator.java
 (original)
+++ 
directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/InternalSerializerCreator.java
 Sat Nov  3 22:03:07 2012
@@ -61,7 +61,7 @@ public final class InternalSerializerCre
 
     private final List<SerializerDefinition> serializerDefinitions = new 
ArrayList<SerializerDefinition>();
 
-    private final Map<Class<?>, Marshaller> marshallers = new 
HashMap<Class<?>, Marshaller>();
+    private final Map<Type, Marshaller> marshallers = new HashMap<Type, 
Marshaller>();
 
     private final ObjectInstantiatorFactory objectInstantiatorFactory = new 
ObjenesisSerializer( true );
 

Copied: 
directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/VisitableMarshallerContext.java
 (from r1405430, 
directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/InternalMarshallerContext.java)
URL: 
http://svn.apache.org/viewvc/directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/VisitableMarshallerContext.java?p2=directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/VisitableMarshallerContext.java&p1=directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/InternalMarshallerContext.java&r1=1405430&r2=1405431&rev=1405431&view=diff
==============================================================================
--- 
directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/InternalMarshallerContext.java
 (original)
+++ 
directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/VisitableMarshallerContext.java
 Sat Nov  3 22:03:07 2012
@@ -26,7 +26,7 @@ import org.apache.directmemory.lightning
 import com.carrotsearch.hppc.ObjectObjectMap;
 import com.carrotsearch.hppc.ObjectObjectOpenHashMap;
 
-public class InternalMarshallerContext
+public class VisitableMarshallerContext
     implements MarshallerContext
 {
 
@@ -34,12 +34,12 @@ public class InternalMarshallerContext
 
     private final ObjectObjectMap<Type, Marshaller> marshallers = new 
ObjectObjectOpenHashMap<Type, Marshaller>();
 
-    public InternalMarshallerContext()
+    public VisitableMarshallerContext()
     {
         this( null );
     }
 
-    public InternalMarshallerContext( MarshallerContext 
parentMarshallerContext )
+    public VisitableMarshallerContext( MarshallerContext 
parentMarshallerContext )
     {
         this.parentMarshallerContext = parentMarshallerContext;
     }

Modified: 
directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/generator/BytecodeMarshallerGenerator.java
URL: 
http://svn.apache.org/viewvc/directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/generator/BytecodeMarshallerGenerator.java?rev=1405431&r1=1405430&r2=1405431&view=diff
==============================================================================
--- 
directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/generator/BytecodeMarshallerGenerator.java
 (original)
+++ 
directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/generator/BytecodeMarshallerGenerator.java
 Sat Nov  3 22:03:07 2012
@@ -54,7 +54,7 @@ public class BytecodeMarshallerGenerator
 
     @Override
     public Marshaller generateMarshaller( Class<?> type, 
List<PropertyDescriptor> propertyDescriptors,
-                                          Map<Class<?>, Marshaller> 
marshallers,
+                                          Map<java.lang.reflect.Type, 
Marshaller> marshallers,
                                           ClassDescriptorAwareSerializer 
serializer,
                                           SerializationStrategy 
serializationStrategy,
                                           ObjectInstantiatorFactory 
objectInstantiatorFactory,

Modified: 
directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/generator/MarshallerGenerator.java
URL: 
http://svn.apache.org/viewvc/directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/generator/MarshallerGenerator.java?rev=1405431&r1=1405430&r2=1405431&view=diff
==============================================================================
--- 
directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/generator/MarshallerGenerator.java
 (original)
+++ 
directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/generator/MarshallerGenerator.java
 Sat Nov  3 22:03:07 2012
@@ -19,6 +19,7 @@
 package org.apache.directmemory.lightning.internal.generator;
 
 import java.io.File;
+import java.lang.reflect.Type;
 import java.util.List;
 import java.util.Map;
 
@@ -33,7 +34,7 @@ public interface MarshallerGenerator
 {
 
     Marshaller generateMarshaller( Class<?> type, List<PropertyDescriptor> 
propertyDescriptors,
-                                   Map<Class<?>, Marshaller> marshallers, 
ClassDescriptorAwareSerializer serializer,
+                                   Map<Type, Marshaller> marshallers, 
ClassDescriptorAwareSerializer serializer,
                                    SerializationStrategy serializationStrategy,
                                    ObjectInstantiatorFactory 
objectInstantiatorFactory, File debugCacheDirectory,
                                    Logger logger );

Added: 
directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/util/FastIntMap.java
URL: 
http://svn.apache.org/viewvc/directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/util/FastIntMap.java?rev=1405431&view=auto
==============================================================================
--- 
directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/util/FastIntMap.java
 (added)
+++ 
directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/util/FastIntMap.java
 Sat Nov  3 22:03:07 2012
@@ -0,0 +1,289 @@
+/*
+ * Copyright 2002-2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance with the
+ * License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an "AS IS"
+ * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 
implied. See the License for the specific language
+ * governing permissions and limitations under the License.
+ */
+package org.apache.directmemory.lightning.internal.util;
+
+import java.util.Iterator;
+
+/**
+ * A hash map using primitive ints as keys rather than objects.
+ * 
+ * @author Justin Couch
+ * @author Alex Chaffee (a...@apache.org)
+ * @author Stephen Colebourne
+ * @author Nathan Sweet
+ */
+public final class FastIntMap<V>
+    implements Iterable<FastIntMap.Entry<V>>
+{
+
+    private Entry[] table;
+
+    private int size, mask, capacity, threshold;
+
+    /** Same as: FastIntMap(16, 0.75f); */
+    public FastIntMap()
+    {
+        this( 16, 0.75f );
+    }
+
+    /** Same as: FastIntMap(initialCapacity, 0.75f); */
+    public FastIntMap( int initialCapacity )
+    {
+        this( initialCapacity, 0.75f );
+    }
+
+    public FastIntMap( int initialCapacity, float loadFactor )
+    {
+        if ( initialCapacity > 1 << 30 )
+            throw new IllegalArgumentException( "initialCapacity is too 
large." );
+        if ( initialCapacity < 0 )
+            throw new IllegalArgumentException( "initialCapacity must be 
greater than zero." );
+        if ( loadFactor <= 0 )
+            throw new IllegalArgumentException( "initialCapacity must be 
greater than zero." );
+        capacity = 1;
+        while ( capacity < initialCapacity )
+            capacity <<= 1;
+        this.threshold = (int) ( capacity * loadFactor );
+        this.table = new Entry[capacity];
+        this.mask = capacity - 1;
+    }
+
+    private int index( final int key )
+    {
+        return index( key, mask );
+    }
+
+    private static int index( final int key, final int mask )
+    {
+        return key & mask;
+    }
+
+    public V put( int key, V value )
+    {
+        final Entry<V>[] table = this.table;
+        int index = index( key );
+
+        // Check if key already exists.
+        for ( Entry<V> e = table[index]; e != null; e = e.next )
+        {
+            if ( e.key != key )
+                continue;
+            V oldValue = e.value;
+            e.value = value;
+            return oldValue;
+        }
+
+        table[index] = new Entry<V>( key, value, table[index] );
+
+        if ( size++ >= threshold )
+            rehash( table );
+
+        return null;
+    }
+
+    private void rehash( final Entry<V>[] table )
+    {
+        final int newCapacity = 2 * capacity;
+        final int newMask = newCapacity - 1;
+
+        final Entry<V>[] newTable = new Entry[newCapacity];
+
+        for ( int i = 0, index; i < table.length; i++ )
+        {
+            Entry<V> e = table[i];
+            if ( e == null )
+                continue;
+            do
+            {
+                final Entry<V> next = e.next;
+                index = index( e.key, newMask );
+                e.next = newTable[index];
+                newTable[index] = e;
+                e = next;
+            }
+            while ( e != null );
+        }
+
+        this.table = newTable;
+        capacity = newCapacity;
+        mask = newMask;
+        threshold *= 2;
+    }
+
+    public V get( int key )
+    {
+        final int index = index( key );
+        for ( Entry<V> e = table[index]; e != null; e = e.next )
+            if ( e.key == key )
+                return e.value;
+        return null;
+    }
+
+    public boolean containsValue( Object value )
+    {
+        final Entry<V>[] table = this.table;
+        for ( int i = table.length - 1; i >= 0; i-- )
+            for ( Entry<V> e = table[i]; e != null; e = e.next )
+                if ( e.value.equals( value ) )
+                    return true;
+        return false;
+    }
+
+    public boolean containsKey( int key )
+    {
+        final int index = index( key );
+        for ( Entry<V> e = table[index]; e != null; e = e.next )
+            if ( e.key == key )
+                return true;
+        return false;
+    }
+
+    public V remove( int key )
+    {
+        final int index = index( key );
+
+        Entry<V> prev = table[index];
+        Entry<V> e = prev;
+        while ( e != null )
+        {
+            Entry<V> next = e.next;
+            if ( e.key == key )
+            {
+                size--;
+                if ( prev == e )
+                    table[index] = next;
+                else
+                    prev.next = next;
+                return e.value;
+            }
+            prev = e;
+            e = next;
+        }
+        return null;
+    }
+
+    public int size()
+    {
+        return size;
+    }
+
+    public boolean isEmpty()
+    {
+        return size == 0;
+    }
+
+    public void clear()
+    {
+        final Entry<V>[] table = this.table;
+        for ( int index = table.length - 1; index >= 0; index-- )
+            table[index] = null;
+        size = 0;
+    }
+
+    public EntryIterator iterator()
+    {
+        return new EntryIterator();
+    }
+
+    public class EntryIterator
+        implements Iterator<Entry<V>>
+    {
+
+        private int nextIndex;
+
+        private Entry<V> current;
+
+        EntryIterator()
+        {
+            reset();
+        }
+
+        public void reset()
+        {
+            current = null;
+            // Find first bucket.
+            final Entry<V>[] table = FastIntMap.this.table;
+            int i;
+            for ( i = table.length - 1; i >= 0; i-- )
+                if ( table[i] != null )
+                    break;
+            nextIndex = i;
+        }
+
+        public boolean hasNext()
+        {
+            if ( nextIndex >= 0 )
+                return true;
+            Entry e = current;
+            return e != null && e.next != null;
+        }
+
+        public Entry<V> next()
+        {
+            // Next entry in current bucket.
+            Entry<V> e = current;
+            if ( e != null )
+            {
+                e = e.next;
+                if ( e != null )
+                {
+                    current = e;
+                    return e;
+                }
+            }
+            // Use the bucket at nextIndex and find the next nextIndex.
+            final Entry<V>[] table = FastIntMap.this.table;
+            int i = nextIndex;
+            e = current = table[i];
+            while ( --i >= 0 )
+                if ( table[i] != null )
+                    break;
+            nextIndex = i;
+            return e;
+        }
+
+        public void remove()
+        {
+            FastIntMap.this.remove( current.key );
+        }
+    }
+
+    static final class Entry<T>
+    {
+
+        final int key;
+
+        T value;
+
+        Entry<T> next;
+
+        Entry( int key, T value, Entry<T> next )
+        {
+            this.key = key;
+            this.value = value;
+            this.next = next;
+        }
+
+        public int getKey()
+        {
+            return key;
+        }
+
+        public T getValue()
+        {
+            return value;
+        }
+
+    }
+
+}
\ No newline at end of file

Added: 
directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/util/FastLongMap.java
URL: 
http://svn.apache.org/viewvc/directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/util/FastLongMap.java?rev=1405431&view=auto
==============================================================================
--- 
directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/util/FastLongMap.java
 (added)
+++ 
directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/util/FastLongMap.java
 Sat Nov  3 22:03:07 2012
@@ -0,0 +1,294 @@
+/*
+ * Copyright 2002-2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance with the
+ * License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an "AS IS"
+ * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 
implied. See the License for the specific language
+ * governing permissions and limitations under the License.
+ */
+package org.apache.directmemory.lightning.internal.util;
+
+import java.util.Iterator;
+
+/*
+ * Taken from lwjgl project
+ */
+
+/**
+ * A hash map using primitive longs as keys rather than objects.
+ * 
+ * @author Justin Couch
+ * @author Alex Chaffee (a...@apache.org)
+ * @author Stephen Colebourne
+ * @author Nathan Sweet
+ */
+public final class FastLongMap<V>
+    implements Iterable<FastLongMap.Entry<V>>
+{
+
+    private Entry[] table;
+
+    private int size, mask, capacity, threshold;
+
+    /** Same as: FastLongMap(16, 0.75f); */
+    public FastLongMap()
+    {
+        this( 16, 0.75f );
+    }
+
+    /** Same as: FastLongMap(initialCapacity, 0.75f); */
+    public FastLongMap( int initialCapacity )
+    {
+        this( initialCapacity, 0.75f );
+    }
+
+    public FastLongMap( int initialCapacity, float loadFactor )
+    {
+        if ( initialCapacity > 1 << 30 )
+            throw new IllegalArgumentException( "initialCapacity is too 
large." );
+        if ( initialCapacity < 0 )
+            throw new IllegalArgumentException( "initialCapacity must be 
greater than zero." );
+        if ( loadFactor <= 0 )
+            throw new IllegalArgumentException( "initialCapacity must be 
greater than zero." );
+        capacity = 1;
+        while ( capacity < initialCapacity )
+            capacity <<= 1;
+        this.threshold = (int) ( capacity * loadFactor );
+        this.table = new Entry[capacity];
+        this.mask = capacity - 1;
+    }
+
+    private int index( final long key )
+    {
+        return index( key, mask );
+    }
+
+    private static int index( final long key, final int mask )
+    {
+        final int hash = (int) ( key ^ ( key >>> 32 ) );
+        return hash & mask;
+    }
+
+    public V put( long key, V value )
+    {
+        final Entry<V>[] table = this.table;
+        int index = index( key );
+
+        // Check if key already exists.
+        for ( Entry<V> e = table[index]; e != null; e = e.next )
+        {
+            if ( e.key != key )
+                continue;
+            V oldValue = e.value;
+            e.value = value;
+            return oldValue;
+        }
+
+        table[index] = new Entry<V>( key, value, table[index] );
+
+        if ( size++ >= threshold )
+            rehash( table );
+
+        return null;
+    }
+
+    private void rehash( final Entry<V>[] table )
+    {
+        final int newCapacity = 2 * capacity;
+        final int newMask = newCapacity - 1;
+
+        final Entry<V>[] newTable = new Entry[newCapacity];
+
+        for ( int i = 0, index; i < table.length; i++ )
+        {
+            Entry<V> e = table[i];
+            if ( e == null )
+                continue;
+            do
+            {
+                final Entry<V> next = e.next;
+                index = index( e.key, newMask );
+                e.next = newTable[index];
+                newTable[index] = e;
+                e = next;
+            }
+            while ( e != null );
+        }
+
+        this.table = newTable;
+        capacity = newCapacity;
+        mask = newMask;
+        threshold *= 2;
+    }
+
+    public V get( long key )
+    {
+        final int index = index( key );
+        for ( Entry<V> e = table[index]; e != null; e = e.next )
+            if ( e.key == key )
+                return e.value;
+        return null;
+    }
+
+    public boolean containsValue( Object value )
+    {
+        final Entry<V>[] table = this.table;
+        for ( int i = table.length - 1; i >= 0; i-- )
+            for ( Entry<V> e = table[i]; e != null; e = e.next )
+                if ( e.value.equals( value ) )
+                    return true;
+        return false;
+    }
+
+    public boolean containsKey( long key )
+    {
+        final int index = index( key );
+        for ( Entry<V> e = table[index]; e != null; e = e.next )
+            if ( e.key == key )
+                return true;
+        return false;
+    }
+
+    public V remove( long key )
+    {
+        final int index = index( key );
+
+        Entry<V> prev = table[index];
+        Entry<V> e = prev;
+        while ( e != null )
+        {
+            Entry<V> next = e.next;
+            if ( e.key == key )
+            {
+                size--;
+                if ( prev == e )
+                    table[index] = next;
+                else
+                    prev.next = next;
+                return e.value;
+            }
+            prev = e;
+            e = next;
+        }
+        return null;
+    }
+
+    public int size()
+    {
+        return size;
+    }
+
+    public boolean isEmpty()
+    {
+        return size == 0;
+    }
+
+    public void clear()
+    {
+        final Entry<V>[] table = this.table;
+        for ( int index = table.length - 1; index >= 0; index-- )
+            table[index] = null;
+        size = 0;
+    }
+
+    public EntryIterator iterator()
+    {
+        return new EntryIterator();
+    }
+
+    public class EntryIterator
+        implements Iterator<Entry<V>>
+    {
+
+        private int nextIndex;
+
+        private Entry<V> current;
+
+        EntryIterator()
+        {
+            reset();
+        }
+
+        public void reset()
+        {
+            current = null;
+            // Find first bucket.
+            final Entry<V>[] table = FastLongMap.this.table;
+            int i;
+            for ( i = table.length - 1; i >= 0; i-- )
+                if ( table[i] != null )
+                    break;
+            nextIndex = i;
+        }
+
+        public boolean hasNext()
+        {
+            if ( nextIndex >= 0 )
+                return true;
+            Entry e = current;
+            return e != null && e.next != null;
+        }
+
+        public Entry<V> next()
+        {
+            // Next entry in current bucket.
+            Entry<V> e = current;
+            if ( e != null )
+            {
+                e = e.next;
+                if ( e != null )
+                {
+                    current = e;
+                    return e;
+                }
+            }
+            // Use the bucket at nextIndex and find the next nextIndex.
+            final Entry<V>[] table = FastLongMap.this.table;
+            int i = nextIndex;
+            e = current = table[i];
+            while ( --i >= 0 )
+                if ( table[i] != null )
+                    break;
+            nextIndex = i;
+            return e;
+        }
+
+        public void remove()
+        {
+            FastLongMap.this.remove( current.key );
+        }
+    }
+
+    static final class Entry<T>
+    {
+
+        final long key;
+
+        T value;
+
+        Entry<T> next;
+
+        Entry( long key, T value, Entry<T> next )
+        {
+            this.key = key;
+            this.value = value;
+            this.next = next;
+        }
+
+        public long getKey()
+        {
+            return key;
+        }
+
+        public T getValue()
+        {
+            return value;
+        }
+
+    }
+
+}
\ No newline at end of file

Modified: 
directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/util/UnicodeUtil.java
URL: 
http://svn.apache.org/viewvc/directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/util/UnicodeUtil.java?rev=1405431&r1=1405430&r2=1405431&view=diff
==============================================================================
--- 
directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/util/UnicodeUtil.java
 (original)
+++ 
directmemory/lightning/trunk/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/util/UnicodeUtil.java
 Sat Nov  3 22:03:07 2012
@@ -330,7 +330,7 @@ public final class UnicodeUtil
             }
         }
 
-        if ( STRING_PP_CONSTRUCTOR == null )
+        if ( STRING_PP_CONSTRUCTOR != null )
         {
             return new String( out );
         }


Reply via email to