Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*-
   * See the file LICENSE for redistribution information.
   *
   * Copyright (c) 2002, 2013 Oracle and/or its affiliates.  All rights reserved.
   *
   */
  package com.sleepycat.je.tree;
  
The base class for the various array representations used by fields associated with an IN node. Storage efficiency, especially when JE is operating in a "cache full" environment is the prime motivation for the various representations.

Each representation assumes that all read operations are done under a shared latch and all updates (set, copy and compact) are done under an exclusive latch. As a result, the representations themselves do not make any provisions for synchronization.

The callers of all the potentially representation mutating methods:

  1. set(int,java.lang.Object,com.sleepycat.je.tree.IN)
  2. copy(int,int,int,com.sleepycat.je.tree.IN)
  3. compact(com.sleepycat.je.tree.IN)
must be careful to save the result value and use it for subsequent operations, since it could represent the new mutated object.
 
 public abstract class INArrayRep<ARRAY_BASE_TYPE, REP_ENUM_TYPE,
                                  ELEMENT_TYPE> {
 
     public INArrayRep() {
     }
 
     /* Returns the type associated with the representation. */
     public abstract REP_ENUM_TYPE getType();

    
Sets the array element at idx to the node. The underlying representation can change as a result of the set operation.

Parameters:
idx the index to be set
e the array elelement at the idx
Returns:
either this, or the new representation if there was a mutation.
 
     public abstract ARRAY_BASE_TYPE set(int idx, ELEMENT_TYPE eIN parent);

    
Returns the element at idx.
 
     public abstract ELEMENT_TYPE get(int idx);

    
Copies n elements at index denoted by "from" to the index denoted by "to". Overlapping copies are supported. It's possible that the representation may mutate as a result of the copy.

Parameters:
from the source (inclusive) of the copy
to the target (inclusive) of the copy
n the number of elements to be copied.
Returns:
either this, or the new representation if there was a mutation.
 
     public abstract ARRAY_BASE_TYPE copy(int fromint toint nIN parent);

    
Chooses a more compact representation, if that's possible, otherwise does nothing.

WARNING: This method must not change the memory size of the current representation and return 'this', without explicitly adjusting memory usage (via noteRepChange) before returning. Returning a new instance is the trigger for adjusting memory usage in the parent.

Returns:
this or a more compact representation.
 
     public abstract ARRAY_BASE_TYPE compact(IN parent);

    
Returns the current memory size of the underlying representation in bytes. It returns the size of the representation, excluding the size of the elements contained in it.

Returns:
the memory size of the representation in bytes
 
     public abstract long calculateMemorySize();

    
Update the cache statistics for this representation.

Parameters:
increment true the stat should be incremented, false if it must be decremented
evictor the evictor that shoulds ths stat counters
See also:
updateCacheStats(boolean,com.sleepycat.je.evictor.Evictor)
    abstract void updateCacheStats(boolean incrementEvictor evictor);

    
Updates the cache statistics associated with this representation. It should be invoked upon every creation, every rep change and finally when the IN node is decached.

Parameters:
increment true if the stat is to be incremented, false if it is to be decremented
    final void updateCacheStats(boolean incrementIN parent) {
        if (!parent.getInListResident()) {
            /* If the IN is not in the cache don't accumulate stats for it. */
            return;
        }
        final DatabaseImpl database = parent.getDatabase();
        updateCacheStats(incrementdatabase.getDbEnvironment().getEvictor());
    }

    
Performs the bookkeeping associated with a representation change. It accounts for the change in storage and adjusts the cache statistics.

Parameters:
newRep the new representation that is replacing this one.
    public final void noteRepChange
        (INArrayRep<ARRAY_BASE_TYPE, REP_ENUM_TYPE, ELEMENT_TYPE> newRep,
         IN parent) {
        if (parent == null) {
            /* Only true in unit tests. */
            return;
        }
        parent.changeMemorySize(newRep.calculateMemorySize() -
                                calculateMemorySize());
        updateCacheStats(falseparent);
        newRep.updateCacheStats(trueparent);
    }
New to GrepCode? Check out our FAQ X