All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.epam.deltix.util.collections.generated.LongHashMapBase Maven / Gradle / Ivy

The newest version!
/*
 * Copyright 2021 EPAM Systems, Inc
 *
 * See the NOTICE file distributed with this work for additional information
 * regarding copyright ownership. 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 com.epam.deltix.util.collections.generated;

import com.epam.deltix.util.collections.*;
import com.epam.deltix.util.collections.hash.*;
import java.util.*;
/**
 *  Base class for Long to anything hash maps.
 */
@SuppressWarnings ("unchecked")
public abstract class LongHashMapBase extends VLinkHashMapBase {

    protected  long []         keys;

    public LongHashMapBase () {
        super ();
    }

    public LongHashMapBase (int cap) {
        super (cap);
    }

    public LongHashMapBase (int cap, HashCodeComputer hashCodeComputer) {
        super (cap, hashCodeComputer);
    }

    protected void          putKey (int idx, long key) {
        keys [idx] = key;
    }

    @Override
    public long             getSizeInMemory () {
        return (
            super.getSizeInMemory () + (SIZE_OF_POINTER + ARRAY_OVERHEAD) +
            keys.length * SIZE_OF_LONG
        );
    }


    @Override
    protected void          allocTable (int cap) {
        super.allocTable (cap);

        keys = new long [cap];
    }

    protected final int     hashIndex (long key) {
        return (hashCodeComputer.modHashCode (key, hashIndex.length));
    }

    public boolean          remove (long key) {
        int         idx = find (key);

        if (idx == NULL)
            return (false);

        free (idx);
        return (true);
    }

    protected int           find (long key) {
        return (find (hashIndex (key), key));
    }

    protected int           find (int hidx, long key) {
        for (int chain = hashIndex [hidx]; chain != NULL; chain = next [chain]) {
            assert hashIndex (keys [chain]) == hidx;

            if (keys [chain] == key)
                return (chain);
        }

        return (NULL);
    }

    /**
     *	Quick test for the presence of the specified key.
     *
     *  @param key  The key to search.
     */
    public boolean          containsKey (long key) {
        return (find (key) != NULL);
    }

    public final boolean    isEmpty () {
        return (count == 0);
    }

protected final class KeyEnumeration implements LongEnumeration {
    	private int             pos = -1;

    	public KeyEnumeration () {
    		move ();
    	}

    	private void            move () {
    		do {
    			pos++;
    		} while (pos < keys.length && isEmpty (pos));
    	}

        @Override
    	public boolean          hasMoreElements () {
    		return (pos < keys.length);
    	}

        @Override
        public void             reset() {
            pos = -1;
            move();
        }

        @Override
	    public long            nextLongElement () {
    		long   ret = keys [pos];
    		move ();
    		return (ret);
    	}

        @Override
    	public Long            nextElement () {
            return (nextLongElement ());
        }

    }

    public LongEnumeration keys () {
    	return (new KeyEnumeration ());
    }

    public final long []   keysToArray (long [] ret) {
        if (ret == null || ret.length < count)
            ret = new long [count];

        int     retIdx = 0;

        for (int ii = 0; ii < keys.length; ii++)
            if (isFilled (ii))
                ret [retIdx++] = keys [ii];

        assert retIdx == count;

        return (ret);
    }

    static final long       serialVersionUID = 1L;

    private void            writeObject (java.io.ObjectOutputStream out)
         throws java.io.IOException
    {
        out.writeShort (1);
    }

    private void            readObject (java.io.ObjectInputStream in)
         throws java.io.IOException, ClassNotFoundException
    {
    	@SuppressWarnings("unused")
        short           readSerialVersion = in.readShort();
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy