/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You 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.ignite.internal.util.offheap; import org.apache.ignite.internal.util.lang.GridCloseableIterator; import org.apache.ignite.internal.util.typedef.CX2; import org.apache.ignite.internal.util.typedef.T2; import org.apache.ignite.lang.IgniteBiPredicate; import org.apache.ignite.lang.IgniteBiTuple; import org.jetbrains.annotations.Nullable; /** * Off-heap map. */ public interface GridOffHeapMap { /** * Gets partition this map belongs to. * * @return Partition this map belongs to. */ public int partition(); /** * Gets load factor of this map. * * @return Load factor. */ public float loadFactor(); /** * Gets concurrency level for this map. * * @return Concurrency level. */ public int concurrency(); /** * Checks if given key is contained in the map. * * @param hash Hash. * @param keyBytes Key bytes. * @return {@code True} if key is contained in the map. */ public boolean contains(int hash, byte[] keyBytes); /** * Gets value bytes for given key. * * @param hash Hash. * @param keyBytes Key bytes. * @return Value bytes. */ @Nullable public byte[] get(int hash, byte[] keyBytes); /** * Gets value pointer for given key. * * @param hash Hash. * @param keyBytes Key bytes. * @return Value pointer. */ @Nullable public IgniteBiTuple<Long, Integer> valuePointer(int hash, byte[] keyBytes); /** * Enables eviction for given key. * * @param hash Hash. * @param keyBytes Key bytes. */ public void enableEviction(int hash, byte[] keyBytes); /** * Removes value from off-heap map. * * @param hash Hash. * @param keyBytes Key bytes. * @return Removed value bytes. */ @Nullable public byte[] remove(int hash, byte[] keyBytes); /** * Removes value from off-heap map without returning it. * * @param hash Hash. * @param keyBytes Key bytes. * @return {@code True} if value was removed. */ public boolean removex(int hash, byte[] keyBytes); /** * Removes value from off-heap map without returning it. * * @param hash Hash. * @param keyBytes Key bytes. * @param p Value predicate (arguments are value address and value length). * @return {@code True} if value was removed. */ public boolean removex(int hash, byte[] keyBytes, IgniteBiPredicate<Long, Integer> p); /** * Puts key and value bytes into the map potentially replacing * existing entry. * * @param hash Hash. * @param keyBytes Key bytes. * @param valBytes Value bytes. * @return {@code True} if new entry was created, {@code false} if existing value was updated. */ public boolean put(int hash, byte[] keyBytes, byte[] valBytes); /** * Inserts new entry into the map without comparing if there is * a mapping for given key already stored in map. * <p> * Use with caution whenever certain that inserting a new value * without current mapping. * * @param hash Hash. * @param keyBytes Key bytes. * @param valBytes Value bytes. */ public void insert(int hash, byte[] keyBytes, byte[] valBytes); /** * Gets number of elements in the map. * * @return Number of elements in the map. */ public long totalSize(); /** * Gets number of elements in the map. * * @return Number of elements in the map. */ public long size(); /** * Gets total available memory size. * * @return Memory size. */ public long memorySize(); /** * Gets memory allocated for map entries so far. * * @return Allocated memory. */ public long allocatedSize(); /** * Gets memory allocated for map internal structure so far. * * @return Allocated memory. */ public long systemAllocatedSize(); /** * Gets available memory. * * @return Available memory. */ public long freeSize(); /** * Destructs this map and deallocates all memory. */ public void destruct(); /** * Gets iterator over map. * * @return Iterator over map. */ public GridCloseableIterator<IgniteBiTuple<byte[], byte[]>> iterator(); /** * Gets iterator over map. * * @param c Key/value closure. * @return Iterator over map. */ public <T> GridCloseableIterator<T> iterator(@Nullable CX2<T2<Long, Integer>, T2<Long, Integer>, T> c); /** * Sets callback for when entries are evicted due to memory constraints. * The parameter into closure is key bytes. * * @param lsnr Evict listener. * @return {@code True} if evict listener was added, {@code false} if * another listener already exists or {@code LRU} is disabled. */ public boolean evictListener(GridOffHeapEvictListener lsnr); /** * Adds off-heap event listener. * * @param lsnr Listener. * @return {@code True} if event listener was added, {@code false} if * another listener already exists. */ public boolean eventListener(GridOffHeapEventListener lsnr); }