/*******************************************************************************
* Copyright (c) 2017 École Polytechnique de Montréal
*
* All rights reserved. This program and the accompanying materials are
* made available under the terms of the Eclipse Public License v1.0 which
* accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*******************************************************************************/
package org.eclipse.tracecompass.internal.provisional.datastore.core.historytree.overlapping;
import java.io.File;
import java.io.IOException;
import org.eclipse.tracecompass.internal.provisional.datastore.core.historytree.overlapping.OverlappingHistoryTree;
import org.eclipse.tracecompass.internal.provisional.datastore.core.historytree.overlapping.OverlappingNode;
import org.eclipse.tracecompass.internal.provisional.datastore.core.interval.HTInterval;
/**
* A stub for the overlapping history tree, specifying the object type to
* {@link HTInterval}.
*
* @author Geneviève Bastien
*/
public class OverlappingHistoryTreeStub extends OverlappingHistoryTree<HTInterval> {
/**
* A factory to create leaf and core nodes based on the BaseHtObject object
*/
public static final IHTNodeFactory<HTInterval, OverlappingNode<HTInterval>> OVERLAPPING_NODE_FACTORY =
(t, b, m, seq, p, start) -> new OverlappingNode<>(t, b, m, seq, p, start);
private int fLastInsertionIndex;
/**
* Create a new Overlapping History Tree test stub from scratch, specifying
* all configuration parameters.
*
* @param stateHistoryFile
* The name of the history file
* @param blockSize
* The size of each "block" on disk in bytes. One node will
* always fit in one block. It should be at least 4096.
* @param maxChildren
* The maximum number of children allowed per core (non-leaf)
* node.
* @param providerVersion
* The version of the state provider. If a file already exists,
* and their versions match, the history file will not be rebuilt
* uselessly.
* @param treeStart
* The start time of the history
* @throws IOException
* If an error happens trying to open/write to the file
* specified in the config
*/
public OverlappingHistoryTreeStub(File stateHistoryFile,
int blockSize,
int maxChildren,
int providerVersion,
long treeStart) throws IOException {
super(stateHistoryFile,
blockSize,
maxChildren,
providerVersion,
treeStart,
HTInterval.INTERVAL_READER);
}
/**
* "Reader" constructor : instantiate a SHTree from an existing tree file on
* disk
*
* @param existingStateFile
* Path/filename of the history-file we are to open
* @param expectedProviderVersion
* The expected version of the state provider
* @throws IOException
* If an error happens reading the file
*/
public OverlappingHistoryTreeStub(File existingStateFile,
int expectedProviderVersion) throws IOException {
super(existingStateFile, expectedProviderVersion, HTInterval.INTERVAL_READER);
}
@Override
protected IHTNodeFactory<HTInterval, OverlappingNode<HTInterval>> getNodeFactory() {
return OVERLAPPING_NODE_FACTORY;
}
@Override
protected void informInsertingAtDepth(int depth) {
fLastInsertionIndex = depth;
}
/**
* Get the index in the current branch where the last element was inserted
*
* @return The index in the branch of the last insertion
*/
public int getLastInsertionLocation() {
return fLastInsertionIndex;
}
// ------------------------------------------------------------------------
// Re-exported methods (to be visible for the tests in same package)
// ------------------------------------------------------------------------
@Override
protected OverlappingNode<HTInterval> getLatestNode(int depth) {
return super.getLatestNode(depth);
}
@Override
protected int getDepth() {
return super.getDepth();
}
@Override
protected OverlappingNode<HTInterval> getLatestLeaf() {
return super.getLatestLeaf();
}
}