test_class.declarator: cacheLoader
test_class.modifier: @Mock
test_class.original_string: @Mock
    CacheLoader<String, String> cacheLoader;
test_class.type: CacheLoader<String, String>
test_class.var_name: cacheLoader
test_class.declarator: evictionListener
test_class.modifier: @Mock
test_class.original_string: @Mock
    EvictionListener<String, String> evictionListener;
test_class.type: EvictionListener<String, String>
test_class.var_name: evictionListener
test_class.declarator: indexHandler
test_class.modifier: @Mock
test_class.original_string: @Mock
    IndexHandler<String, String> indexHandler;
test_class.type: IndexHandler<String, String>
test_class.var_name: indexHandler
test_class.declarator: cache
test_class.original_string: VersionedOffHeapCache<String, String> cache;
test_class.type: VersionedOffHeapCache<String, String>
test_class.var_name: cache
test_class.declarator: serializer = new Serializer<String>() {
  
      @Override
      public byte[] serialize(String value) {
        return value.getBytes();
      }
  
      @Override
      public String deserialize(byte[] payload) {
        return new String(payload);
      }
    }
test_class.original_string: Serializer<String> serializer = new Serializer<String>() {
  
      @Override
      public byte[] serialize(String value) {
        return value.getBytes();
      }
  
      @Override
      public String deserialize(byte[] payload) {
        return new String(payload);
      }
    };
test_class.type: Serializer<String>
test_class.var_name: serializer
test_class.declarator: bufferStore = new OffHeapByteBufferStore(1000, 2)
test_class.modifier: @Spy
test_class.original_string: @Spy
    OffHeapByteBufferStore bufferStore = new OffHeapByteBufferStore(1000, 2);
test_class.type: OffHeapByteBufferStore
test_class.var_name: bufferStore
test_class.file: imcache-offheap/src/test/java/com/cetsoft/imcache/offheap/VersionedOffHeapCacheTest.java
test_class.identifier: VersionedOffHeapCacheTest
test_case.body: @Test
    public void put() {
      final String key = "key1", value = "valueA";
  
      cache.put(key, new SimpleItem(value));
  
      verify(cache.offHeapCache).put(key, new SimpleItem<>(0, value));
    }
test_case.class_method_signature: VersionedOffHeapCacheTest.put()
test_case.full_signature: @Test public void put()
test_case.identifier: put
test_case.invocations: put put verify
test_case.modifiers: @Test public
test_case.parameters: ()
test_case.return: void
test_case.signature: void put()
focal_class.declarator: offHeapCache
focal_class.modifier: protected
focal_class.original_string: protected OffHeapCache<K, VersionedItem<V>> offHeapCache;
focal_class.type: OffHeapCache<K, VersionedItem<V>>
focal_class.var_name: offHeapCache
focal_class.declarator: readWriteLock
focal_class.modifier: private
focal_class.original_string: private StripedReadWriteLock readWriteLock;
focal_class.type: StripedReadWriteLock
focal_class.var_name: readWriteLock
focal_class.file: imcache-offheap/src/main/java/com/cetsoft/imcache/offheap/VersionedOffHeapCache.java
focal_class.identifier: VersionedOffHeapCache
focal_class.interfaces: implements SearchableCache<K, VersionedItem<V>>
focal_class.class_method_signature: VersionedOffHeapCache.VersionedOffHeapCache(final String name, final Serializer<VersionedItem<V>> serializer,
        final OffHeapByteBufferStore byteBufferStore,
        final CacheLoader<K, VersionedItem<V>> cacheLoader,
        final EvictionListener<K, VersionedItem<V>> evictionListener,
        final IndexHandler<K, VersionedItem<V>> indexHandler,
        final long bufferCleanerPeriod, final float bufferCleanerThreshold,
        final int concurrencyLevel, final long evictionPeriod)
focal_class.full_signature: public  VersionedOffHeapCache(final String name, final Serializer<VersionedItem<V>> serializer,
        final OffHeapByteBufferStore byteBufferStore,
        final CacheLoader<K, VersionedItem<V>> cacheLoader,
        final EvictionListener<K, VersionedItem<V>> evictionListener,
        final IndexHandler<K, VersionedItem<V>> indexHandler,
        final long bufferCleanerPeriod, final float bufferCleanerThreshold,
        final int concurrencyLevel, final long evictionPeriod)
focal_class.identifier: VersionedOffHeapCache
focal_class.modifiers: public
focal_class.parameters: (final String name, final Serializer<VersionedItem<V>> serializer,
        final OffHeapByteBufferStore byteBufferStore,
        final CacheLoader<K, VersionedItem<V>> cacheLoader,
        final EvictionListener<K, VersionedItem<V>> evictionListener,
        final IndexHandler<K, VersionedItem<V>> indexHandler,
        final long bufferCleanerPeriod, final float bufferCleanerThreshold,
        final int concurrencyLevel, final long evictionPeriod)
focal_class.signature:  VersionedOffHeapCache(final String name, final Serializer<VersionedItem<V>> serializer,
        final OffHeapByteBufferStore byteBufferStore,
        final CacheLoader<K, VersionedItem<V>> cacheLoader,
        final EvictionListener<K, VersionedItem<V>> evictionListener,
        final IndexHandler<K, VersionedItem<V>> indexHandler,
        final long bufferCleanerPeriod, final float bufferCleanerThreshold,
        final int concurrencyLevel, final long evictionPeriod)
focal_class.class_method_signature: VersionedOffHeapCache.VersionedOffHeapCache(final String name, final OffHeapByteBufferStore byteBufferStore,
        final Serializer<V> serializer, final CacheLoader<K, V> cacheLoader,
        final EvictionListener<K, V> evictionListener, final IndexHandler<K, V> indexHandler,
        final long bufferCleanerPeriod, final float bufferCleanerThreshold,
        final int concurrencyLevel,
        final long evictionPeriod)
focal_class.full_signature: public  VersionedOffHeapCache(final String name, final OffHeapByteBufferStore byteBufferStore,
        final Serializer<V> serializer, final CacheLoader<K, V> cacheLoader,
        final EvictionListener<K, V> evictionListener, final IndexHandler<K, V> indexHandler,
        final long bufferCleanerPeriod, final float bufferCleanerThreshold,
        final int concurrencyLevel,
        final long evictionPeriod)
focal_class.identifier: VersionedOffHeapCache
focal_class.modifiers: public
focal_class.parameters: (final String name, final OffHeapByteBufferStore byteBufferStore,
        final Serializer<V> serializer, final CacheLoader<K, V> cacheLoader,
        final EvictionListener<K, V> evictionListener, final IndexHandler<K, V> indexHandler,
        final long bufferCleanerPeriod, final float bufferCleanerThreshold,
        final int concurrencyLevel,
        final long evictionPeriod)
focal_class.signature:  VersionedOffHeapCache(final String name, final OffHeapByteBufferStore byteBufferStore,
        final Serializer<V> serializer, final CacheLoader<K, V> cacheLoader,
        final EvictionListener<K, V> evictionListener, final IndexHandler<K, V> indexHandler,
        final long bufferCleanerPeriod, final float bufferCleanerThreshold,
        final int concurrencyLevel,
        final long evictionPeriod)
focal_class.class_method_signature: VersionedOffHeapCache.put(K key, VersionedItem<V> value)
focal_class.full_signature: public void put(K key, VersionedItem<V> value)
focal_class.identifier: put
focal_class.modifiers: public
focal_class.parameters: (K key, VersionedItem<V> value)
focal_class.return: void
focal_class.signature: void put(K key, VersionedItem<V> value)
focal_class.class_method_signature: VersionedOffHeapCache.put(final K key, VersionedItem<V> value, final TimeUnit timeUnit,
        final long duration)
focal_class.full_signature: @Override public void put(final K key, VersionedItem<V> value, final TimeUnit timeUnit,
        final long duration)
focal_class.identifier: put
focal_class.modifiers: @Override public
focal_class.parameters: (final K key, VersionedItem<V> value, final TimeUnit timeUnit,
        final long duration)
focal_class.return: void
focal_class.signature: void put(final K key, VersionedItem<V> value, final TimeUnit timeUnit,
        final long duration)
focal_class.class_method_signature: VersionedOffHeapCache.putInternal(final K key, final VersionedItem<V> value,
        final PutOperation<V> putOperation)
focal_class.full_signature: protected void putInternal(final K key, final VersionedItem<V> value,
        final PutOperation<V> putOperation)
focal_class.identifier: putInternal
focal_class.modifiers: protected
focal_class.parameters: (final K key, final VersionedItem<V> value,
        final PutOperation<V> putOperation)
focal_class.return: void
focal_class.signature: void putInternal(final K key, final VersionedItem<V> value,
        final PutOperation<V> putOperation)
focal_class.class_method_signature: VersionedOffHeapCache.writeLock(K key)
focal_class.full_signature: protected void writeLock(K key)
focal_class.identifier: writeLock
focal_class.modifiers: protected
focal_class.parameters: (K key)
focal_class.return: void
focal_class.signature: void writeLock(K key)
focal_class.class_method_signature: VersionedOffHeapCache.writeUnlock(K key)
focal_class.full_signature: protected void writeUnlock(K key)
focal_class.identifier: writeUnlock
focal_class.modifiers: protected
focal_class.parameters: (K key)
focal_class.return: void
focal_class.signature: void writeUnlock(K key)
focal_class.class_method_signature: VersionedOffHeapCache.get(K key)
focal_class.full_signature: public VersionedItem<V> get(K key)
focal_class.identifier: get
focal_class.modifiers: public
focal_class.parameters: (K key)
focal_class.return: VersionedItem<V>
focal_class.signature: VersionedItem<V> get(K key)
focal_class.class_method_signature: VersionedOffHeapCache.invalidate(K key)
focal_class.full_signature: public VersionedItem<V> invalidate(K key)
focal_class.identifier: invalidate
focal_class.modifiers: public
focal_class.parameters: (K key)
focal_class.return: VersionedItem<V>
focal_class.signature: VersionedItem<V> invalidate(K key)
focal_class.class_method_signature: VersionedOffHeapCache.contains(K key)
focal_class.full_signature: public boolean contains(K key)
focal_class.identifier: contains
focal_class.modifiers: public
focal_class.parameters: (K key)
focal_class.return: boolean
focal_class.signature: boolean contains(K key)
focal_class.class_method_signature: VersionedOffHeapCache.clear()
focal_class.full_signature: public void clear()
focal_class.identifier: clear
focal_class.modifiers: public
focal_class.parameters: ()
focal_class.return: void
focal_class.signature: void clear()
focal_class.class_method_signature: VersionedOffHeapCache.size()
focal_class.full_signature: public long size()
focal_class.identifier: size
focal_class.modifiers: public
focal_class.parameters: ()
focal_class.return: long
focal_class.signature: long size()
focal_class.class_method_signature: VersionedOffHeapCache.execute(Query query)
focal_class.full_signature: public List<VersionedItem<V>> execute(Query query)
focal_class.identifier: execute
focal_class.modifiers: public
focal_class.parameters: (Query query)
focal_class.return: List<VersionedItem<V>>
focal_class.signature: List<VersionedItem<V>> execute(Query query)
focal_class.class_method_signature: VersionedOffHeapCache.getName()
focal_class.full_signature: public String getName()
focal_class.identifier: getName
focal_class.modifiers: public
focal_class.parameters: ()
focal_class.return: String
focal_class.signature: String getName()
focal_class.class_method_signature: VersionedOffHeapCache.stats()
focal_class.full_signature: @Override public CacheStats stats()
focal_class.identifier: stats
focal_class.modifiers: @Override public
focal_class.parameters: ()
focal_class.return: CacheStats
focal_class.signature: CacheStats stats()
focal_method.body: public void put(K key, VersionedItem<V> value) {
      putInternal(key, value, versionedItem -> offHeapCache.put(key, versionedItem));
    }
focal_method.class_method_signature: VersionedOffHeapCache.put(K key, VersionedItem<V> value)
focal_method.full_signature: public void put(K key, VersionedItem<V> value)
focal_method.identifier: put
focal_method.invocations: putInternal put
focal_method.modifiers: public
focal_method.parameters: (K key, VersionedItem<V> value)
focal_method.return: void
focal_method.signature: void put(K key, VersionedItem<V> value)