separated build-in vars from BExpressionContext
This commit is contained in:
parent
53c3df66f5
commit
3ed62bb2b3
13 changed files with 280 additions and 72 deletions
|
|
@ -22,7 +22,7 @@ import btools.util.Crc32;
|
|||
import java.util.Random;
|
||||
|
||||
|
||||
public final class BExpressionContext
|
||||
public abstract class BExpressionContext
|
||||
{
|
||||
private static final String CONTEXT_TAG = "---context:";
|
||||
|
||||
|
|
@ -63,33 +63,23 @@ public final class BExpressionContext
|
|||
private int minWriteIdx;
|
||||
|
||||
// build-in variable indexes for fast access
|
||||
private int costfactorIdx;
|
||||
private int turncostIdx;
|
||||
private int uphillcostfactorIdx;
|
||||
private int downhillcostfactorIdx;
|
||||
private int initialcostIdx;
|
||||
private int nodeaccessgrantedIdx;
|
||||
private int[] buildInVariableIdx;
|
||||
|
||||
private float[] _arrayCostfactor;
|
||||
private float[] _arrayTurncost;
|
||||
private float[] _arrayUphillCostfactor;
|
||||
private float[] _arrayDownhillCostfactor;
|
||||
private float[] _arrayInitialcost;
|
||||
private float[] _arrayNodeAccessGranted;
|
||||
protected float[][] arrayBuildInVariablesCache;
|
||||
|
||||
public float getCostfactor() { return _arrayCostfactor[currentHashBucket]; }
|
||||
public float getTurncost() { return _arrayTurncost[currentHashBucket]; }
|
||||
public float getUphillCostfactor() { return _arrayUphillCostfactor[currentHashBucket]; }
|
||||
public float getDownhillCostfactor() { return _arrayDownhillCostfactor[currentHashBucket]; }
|
||||
public float getInitialcost() { return _arrayInitialcost[currentHashBucket]; }
|
||||
public float getNodeAccessGranted() { return _arrayNodeAccessGranted[currentHashBucket]; }
|
||||
abstract String[] getBuildInVariableNames();
|
||||
|
||||
protected float getBuildInVariable( int idx )
|
||||
{
|
||||
return arrayBuildInVariablesCache[idx][currentHashBucket];
|
||||
}
|
||||
|
||||
private int linenr;
|
||||
|
||||
public BExpressionMetaData meta;
|
||||
private boolean lookupDataValid = false;
|
||||
|
||||
public BExpressionContext( String context, BExpressionMetaData meta )
|
||||
protected BExpressionContext( String context, BExpressionMetaData meta )
|
||||
{
|
||||
this( context, 4096, meta );
|
||||
}
|
||||
|
|
@ -100,7 +90,7 @@ public final class BExpressionContext
|
|||
* @param context global, way or node - context of that instance
|
||||
* @param hashSize size of hashmap for result caching
|
||||
*/
|
||||
public BExpressionContext( String context, int hashSize, BExpressionMetaData meta )
|
||||
protected BExpressionContext( String context, int hashSize, BExpressionMetaData meta )
|
||||
{
|
||||
this.context = context;
|
||||
this.meta = meta;
|
||||
|
|
@ -113,12 +103,13 @@ public final class BExpressionContext
|
|||
_arrayInverse = new boolean[hashSize];
|
||||
_arrayCrc = new int[hashSize];
|
||||
|
||||
_arrayCostfactor = new float[hashSize];
|
||||
_arrayTurncost = new float[hashSize];
|
||||
_arrayUphillCostfactor = new float[hashSize];
|
||||
_arrayDownhillCostfactor = new float[hashSize];
|
||||
_arrayInitialcost = new float[hashSize];
|
||||
_arrayNodeAccessGranted = new float[hashSize];
|
||||
// create the build-in variables cache
|
||||
int nBuildInVars = getBuildInVariableNames().length;
|
||||
arrayBuildInVariablesCache = new float[nBuildInVars][];
|
||||
for( int vi=0; vi<nBuildInVars; vi++ )
|
||||
{
|
||||
arrayBuildInVariablesCache[vi] = new float[hashSize];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -406,12 +397,10 @@ public final class BExpressionContext
|
|||
decode( lookupData, currentInverseDirection, currentByteArray );
|
||||
evaluate( lookupData );
|
||||
|
||||
_arrayCostfactor[currentHashBucket] = variableData[costfactorIdx];
|
||||
_arrayTurncost[currentHashBucket] = variableData[turncostIdx];
|
||||
_arrayUphillCostfactor[currentHashBucket] = variableData[uphillcostfactorIdx];
|
||||
_arrayDownhillCostfactor[currentHashBucket] = variableData[downhillcostfactorIdx];
|
||||
_arrayInitialcost[currentHashBucket] = variableData[initialcostIdx];
|
||||
_arrayNodeAccessGranted[currentHashBucket] = variableData[nodeaccessgrantedIdx];
|
||||
for( int vi=0; vi<buildInVariableIdx.length; vi++ )
|
||||
{
|
||||
arrayBuildInVariablesCache[vi][currentHashBucket] = variableData[buildInVariableIdx[vi]];
|
||||
}
|
||||
|
||||
_receiver = null;
|
||||
return false;
|
||||
|
|
@ -669,13 +658,13 @@ public final class BExpressionContext
|
|||
linenr = 1;
|
||||
minWriteIdx = variableData == null ? 0 : variableData.length;
|
||||
|
||||
costfactorIdx = getVariableIdx( "costfactor", true );
|
||||
turncostIdx = getVariableIdx( "turncost", true );
|
||||
uphillcostfactorIdx = getVariableIdx( "uphillcostfactor", true );
|
||||
downhillcostfactorIdx = getVariableIdx( "downhillcostfactor", true );
|
||||
initialcostIdx = getVariableIdx( "initialcost", true );
|
||||
nodeaccessgrantedIdx = getVariableIdx( "nodeaccessgranted", true );
|
||||
|
||||
// create the build-in variables
|
||||
String[] varNames = getBuildInVariableNames();
|
||||
buildInVariableIdx = new int[varNames.length];
|
||||
for( int vi=0; vi<varNames.length; vi++ )
|
||||
{
|
||||
buildInVariableIdx[vi] = getVariableIdx( varNames[vi], true );
|
||||
}
|
||||
|
||||
expressionList = _parseFile( file );
|
||||
float[] readOnlyData = variableData;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,35 @@
|
|||
// context for simple expression
|
||||
// context means:
|
||||
// - the local variables
|
||||
// - the local variable names
|
||||
// - the lookup-input variables
|
||||
|
||||
package btools.expressions;
|
||||
|
||||
|
||||
|
||||
public final class BExpressionContextGlobal extends BExpressionContext
|
||||
{
|
||||
private static String[] buildInVariables =
|
||||
{};
|
||||
|
||||
protected String[] getBuildInVariableNames()
|
||||
{
|
||||
return buildInVariables;
|
||||
}
|
||||
|
||||
public BExpressionContextGlobal( BExpressionMetaData meta )
|
||||
{
|
||||
super( "global", meta );
|
||||
}
|
||||
|
||||
/**
|
||||
* Create an Expression-Context for way context
|
||||
*
|
||||
* @param hashSize size of hashmap for result caching
|
||||
*/
|
||||
public BExpressionContextGlobal( int hashSize, BExpressionMetaData meta )
|
||||
{
|
||||
super( "global", hashSize, meta );
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
// context for simple expression
|
||||
// context means:
|
||||
// - the local variables
|
||||
// - the local variable names
|
||||
// - the lookup-input variables
|
||||
|
||||
package btools.expressions;
|
||||
|
||||
|
||||
|
||||
public final class BExpressionContextNode extends BExpressionContext
|
||||
{
|
||||
private static String[] buildInVariables =
|
||||
{ "initialcost" };
|
||||
|
||||
protected String[] getBuildInVariableNames()
|
||||
{
|
||||
return buildInVariables;
|
||||
}
|
||||
|
||||
public float getInitialcost() { return getBuildInVariable(0); }
|
||||
|
||||
|
||||
public BExpressionContextNode( BExpressionMetaData meta )
|
||||
{
|
||||
super( "node", meta );
|
||||
}
|
||||
|
||||
/**
|
||||
* Create an Expression-Context for way context
|
||||
*
|
||||
* @param hashSize size of hashmap for result caching
|
||||
*/
|
||||
public BExpressionContextNode( int hashSize, BExpressionMetaData meta )
|
||||
{
|
||||
super( "node", hashSize, meta );
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
// context for simple expression
|
||||
// context means:
|
||||
// - the local variables
|
||||
// - the local variable names
|
||||
// - the lookup-input variables
|
||||
|
||||
package btools.expressions;
|
||||
|
||||
|
||||
|
||||
public final class BExpressionContextWay extends BExpressionContext
|
||||
{
|
||||
private static String[] buildInVariables =
|
||||
{ "costfactor", "turncost", "uphillcostfactor", "downhillcostfactor", "initialcost", "nodeaccessgranted" };
|
||||
|
||||
protected String[] getBuildInVariableNames()
|
||||
{
|
||||
return buildInVariables;
|
||||
}
|
||||
|
||||
public float getCostfactor() { return getBuildInVariable(0); }
|
||||
public float getTurncost() { return getBuildInVariable(1); }
|
||||
public float getUphillCostfactor() { return getBuildInVariable(2); }
|
||||
public float getDownhillCostfactor() { return getBuildInVariable(3); }
|
||||
public float getInitialcost() { return getBuildInVariable(4); }
|
||||
public float getNodeAccessGranted() { return getBuildInVariable(5); }
|
||||
|
||||
|
||||
public BExpressionContextWay( BExpressionMetaData meta )
|
||||
{
|
||||
super( "way", meta );
|
||||
}
|
||||
|
||||
/**
|
||||
* Create an Expression-Context for way context
|
||||
*
|
||||
* @param hashSize size of hashmap for result caching
|
||||
*/
|
||||
public BExpressionContextWay( int hashSize, BExpressionMetaData meta )
|
||||
{
|
||||
super( "way", hashSize, meta );
|
||||
}
|
||||
}
|
||||
|
|
@ -29,18 +29,18 @@ public final class ProfileComparator
|
|||
File profile1File = new File( args[1] );
|
||||
File profile2File = new File( args[2] );
|
||||
int nsamples = Integer.parseInt( args[3] );
|
||||
testContext( lookupFile, profile1File, profile2File, nsamples, "way" );
|
||||
testContext( lookupFile, profile1File, profile2File, nsamples, "node" );
|
||||
testContext( lookupFile, profile1File, profile2File, nsamples, false );
|
||||
testContext( lookupFile, profile1File, profile2File, nsamples, true );
|
||||
|
||||
}
|
||||
|
||||
private static void testContext( File lookupFile, File profile1File, File profile2File, int nsamples, String contextName )
|
||||
private static void testContext( File lookupFile, File profile1File, File profile2File, int nsamples, boolean nodeContext )
|
||||
{
|
||||
// read lookup.dat + profiles
|
||||
BExpressionMetaData meta1 = new BExpressionMetaData();
|
||||
BExpressionMetaData meta2 = new BExpressionMetaData();
|
||||
BExpressionContext expctx1 = new BExpressionContext(contextName, 4096, meta1 );
|
||||
BExpressionContext expctx2 = new BExpressionContext(contextName, 4096, meta2 );
|
||||
BExpressionContext expctx1 = nodeContext ? new BExpressionContextNode( meta1 ) : new BExpressionContextWay( meta1 );
|
||||
BExpressionContext expctx2 = nodeContext ? new BExpressionContextNode( meta2 ) : new BExpressionContextWay( meta2 );
|
||||
meta1.readMetaData( lookupFile );
|
||||
meta2.readMetaData( lookupFile );
|
||||
expctx1.parseFile( profile1File, "global" );
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ public class EncodeDecodeTest
|
|||
|
||||
// read lookup.dat + trekking.brf
|
||||
BExpressionMetaData meta = new BExpressionMetaData();
|
||||
BExpressionContext expctxWay = new BExpressionContext("way", 4096, meta );
|
||||
BExpressionContextWay expctxWay = new BExpressionContextWay( meta );
|
||||
meta.readMetaData( lookupFile );
|
||||
expctxWay.parseFile( new File( profileDir, "trekking.brf" ), "global" );
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue