com.epam.deltix.util.collections.generated.HdTimeSpanHashMapBase Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of timebase-collections Show documentation
Show all versions of timebase-collections Show documentation
Timebase Common utilities and collections
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.*;
import com.epam.deltix.hdtime.HdTimeSpan;
/**
* Base class for HdTimeSpan to anything hash maps.
*/
@SuppressWarnings ("unchecked")
public abstract class HdTimeSpanHashMapBase extends VLinkHashMapBase {
protected HdTimeSpan [] keys;
public HdTimeSpanHashMapBase () {
super ();
}
public HdTimeSpanHashMapBase (int cap) {
super (cap);
}
public HdTimeSpanHashMapBase (int cap, HashCodeComputer hashCodeComputer) {
super (cap, hashCodeComputer);
}
protected void putKey (int idx, HdTimeSpan key) {
keys [idx] = key;
}
@Override
public long getSizeInMemory () {
return (
super.getSizeInMemory () + (SIZE_OF_POINTER + ARRAY_OVERHEAD) +
keys.length * SIZE_OF_POINTER
);
}
@Override
protected void allocTable (int cap) {
super.allocTable (cap);
keys = new HdTimeSpan [cap];
}
protected final int hashIndex (HdTimeSpan key) {
return (hashCodeComputer.modHashCode (key, hashIndex.length));
}
public boolean remove (HdTimeSpan key) {
int idx = find (key);
if (idx == NULL)
return (false);
free (idx);
return (true);
}
protected int find (HdTimeSpan key) {
return (find (hashIndex (key), key));
}
protected int find (int hidx, HdTimeSpan 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 (HdTimeSpan key) {
return (find (key) != NULL);
}
public final boolean isEmpty () {
return (count == 0);
}
protected final class KeyEnumeration implements HdTimeSpanEnumeration {
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 HdTimeSpan nextHdTimeSpanElement () {
HdTimeSpan ret = keys [pos];
move ();
return (ret);
}
@Override
public HdTimeSpan nextElement () {
return (nextHdTimeSpanElement ());
}
}
public HdTimeSpanEnumeration keys () {
return (new KeyEnumeration ());
}
public final HdTimeSpan [] keysToArray (HdTimeSpan [] ret) {
if (ret == null || ret.length < count)
ret = new HdTimeSpan [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();
}
}