package com.sleepycat.je.tree;
public final class DIN {
/**
* Count up the memory usage attributable to this node alone. LNs children
* are counted by their BIN/DIN parents, but INs are not counted by
* their parents because they are resident on the IN list.
*/
protected long computeMemorySize(){
long size=super.computeMemorySize();
if (dupCountLNRef != null) {
size+=getEntryInMemorySize(dupCountLNRef.getKey(),dupCountLNRef.getTarget());
}
return size;
}
public static long computeOverhead( DbConfigManager configManager) throws DatabaseException {
return MemoryBudget.DIN_FIXED_OVERHEAD + IN.computeArraysOverhead(configManager);
}
protected long getMemoryOverhead( MemoryBudget mb){
return mb.getDINOverhead();
}
/**
* Create a new DIN.
*/
DIN( DatabaseImpl db, byte[] identifierKey, int capacity, byte[] dupKey, ChildReference dupCountLNRef, int level){
initMemorySize();
}
/**
* Assign the Dup Count LN.
*/
void setDupCountLN( ChildReference dupCountLNRef){
updateMemorySize(this.dupCountLNRef,dupCountLNRef);
original(dupCountLNRef);
}
@MethodObject static class DIN_updateDupCountLNRefAndNullTarget {
void execute(){
original();
newSize=_this.getEntryInMemorySize(_this.dupCountLNRef.getKey(),_this.dupCountLNRef.getTarget());
_this.updateMemorySize(oldSize,newSize);
}
protected void hook614(){
oldSize=_this.getEntryInMemorySize(_this.dupCountLNRef.getKey(),_this.dupCountLNRef.getTarget());
original();
}
}
@MethodObject static class DIN_updateDupCountLN {
void execute(){
oldSize=_this.getEntryInMemorySize(_this.dupCountLNRef.getKey(),_this.dupCountLNRef.getTarget());
original();
newSize=_this.getEntryInMemorySize(_this.dupCountLNRef.getKey(),_this.dupCountLNRef.getTarget());
_this.updateMemorySize(oldSize,newSize);
}
}
}