splaytree gutting

git-svn-id: https://projectm.svn.sourceforge.net/svnroot/projectm/personal/carm/dev-1.0@269 6778bc44-b910-0410-a7a0-be141de4315d
This commit is contained in:
w1z7ard
2007-07-16 04:39:22 +00:00
parent 7cad288715
commit 7066917125
26 changed files with 391 additions and 405 deletions

View File

@ -6,212 +6,251 @@
BuiltinParams::BuiltinParams() {}
BuiltinParams::BuiltinParams(const PresetInputs & presetInputs, PresetOutputs & presetOutputs) {
BuiltinParams::BuiltinParams(const PresetInputs & presetInputs, PresetOutputs & presetOutputs)
{
int ret;
if ((ret = init_builtin_param_db(presetInputs, presetOutputs)) != PROJECTM_SUCCESS) {
throw ret;
}
int ret;
if ((ret = init_builtin_param_db(presetInputs, presetOutputs)) != PROJECTM_SUCCESS)
{
throw ret;
}
}
BuiltinParams::~BuiltinParams() {
destroy_builtin_param_db();
BuiltinParams::~BuiltinParams()
{
destroy_builtin_param_db();
}
/* Loads a float parameter into the builtin database */
int BuiltinParams::load_builtin_param_float(char * name, void * engine_val, void * matrix, short int flags,
float init_val, float upper_bound, float lower_bound, char * alt_name) {
float init_val, float upper_bound, float lower_bound, char * alt_name)
{
Param * param = NULL;
CValue iv, ub, lb;
Param * param = NULL;
CValue iv, ub, lb;
iv.float_val = init_val;
ub.float_val = upper_bound;
lb.float_val = lower_bound;
iv.float_val = init_val;
ub.float_val = upper_bound;
lb.float_val = lower_bound;
/* Create new parameter of type float */
if (BUILTIN_PARAMS_DEBUG == 2) {
printf("load_builtin_param_float: (name \"%s\") (alt_name = \"%s\") ", name, alt_name);
fflush(stdout);
/* Create new parameter of type float */
if (BUILTIN_PARAMS_DEBUG == 2)
{
printf("load_builtin_param_float: (name \"%s\") (alt_name = \"%s\") ", name, alt_name);
fflush(stdout);
}
if ((param = new Param(name, P_TYPE_DOUBLE, flags, engine_val, matrix, iv, ub, lb)) == NULL)
{
return PROJECTM_OUTOFMEM_ERROR;
}
if (BUILTIN_PARAMS_DEBUG == 2)
{
printf("created...");
fflush(stdout);
}
/* Insert the paremeter into the database */
if (insert_builtin_param( param ) < 0)
{
delete param;
return PROJECTM_ERROR;
}
if (BUILTIN_PARAMS_DEBUG == 2)
{
printf("inserted...");
fflush(stdout);
}
/* If this parameter has an alternate name, insert it into the database as link */
if (alt_name != NULL)
{
insert_param_alt_name(param,alt_name);
if (BUILTIN_PARAMS_DEBUG == 2)
{
printf("alt_name inserted...");
fflush(stdout);
}
if ((param = new Param(name, P_TYPE_DOUBLE, flags, engine_val, matrix, iv, ub, lb)) == NULL) {
return PROJECTM_OUTOFMEM_ERROR;
}
if (BUILTIN_PARAMS_DEBUG == 2) {
printf("created...");
fflush(stdout);
}
}
/* Insert the paremeter into the database */
if (BUILTIN_PARAMS_DEBUG == 2) printf("finished\n");
if (insert_builtin_param( param ) < 0) {
delete param;
return PROJECTM_ERROR;
}
if (BUILTIN_PARAMS_DEBUG == 2) {
printf("inserted...");
fflush(stdout);
}
/* If this parameter has an alternate name, insert it into the database as link */
if (alt_name != NULL) {
insert_param_alt_name(param,alt_name);
if (BUILTIN_PARAMS_DEBUG == 2) {
printf("alt_name inserted...");
fflush(stdout);
}
}
if (BUILTIN_PARAMS_DEBUG == 2) printf("finished\n");
/* Finished, return success */
return PROJECTM_SUCCESS;
/* Finished, return success */
return PROJECTM_SUCCESS;
}
/* Destroy the builtin parameter database.
Generally, do this on projectm exit */
int BuiltinParams::destroy_builtin_param_db() {
int BuiltinParams::destroy_builtin_param_db()
{
builtin_param_tree->traverse
<SplayTreeFunctors::Delete<Param> >();
delete builtin_param_tree;
builtin_param_tree = NULL;
return PROJECTM_SUCCESS;
builtin_param_tree->traverse
<SplayTreeFunctors::Delete<Param> >();
delete builtin_param_tree;
builtin_param_tree = NULL;
return PROJECTM_SUCCESS;
}
/* Insert a parameter into the database with an alternate name */
int BuiltinParams::insert_param_alt_name(Param *param, char * alt_name) {
int BuiltinParams::insert_param_alt_name(Param *param, char * alt_name)
{
assert(alt_name);
assert(alt_name);
aliasMap.insert(std::make_pair(std::string(alt_name), std::string(param->name)));
aliasMap.insert(std::make_pair(std::string(alt_name), std::string(param->name)));
return PROJECTM_SUCCESS;
return PROJECTM_SUCCESS;
}
Param * BuiltinParams::find_builtin_param(char * name) {
Param * BuiltinParams::find_builtin_param(const std::string & name)
{
assert(name);
AliasMap::iterator pos = aliasMap.find(name);
Param * param = 0;
AliasMap::iterator pos = aliasMap.find(std::string(name));
if (pos == aliasMap.end())
{
std::map<std::string, Param*>::iterator builtinPos = builtin_param_tree->find(name);
if (pos == aliasMap.end())
return builtin_param_tree->splay_find(name);
else
return builtin_param_tree->splay_find(pos->second.c_str());
if (builtinPos != builtin_param_tree->end())
param = builtinPos->second;
}
else
{
std::map<std::string, Param*>::iterator builtinPos = builtin_param_tree->find(pos->second);
if (builtinPos != builtin_param_tree->end())
param = builtinPos->second;
}
return param;
}
/* Loads a integer parameter into the builtin database */
int BuiltinParams::load_builtin_param_int(char * name, void * engine_val, short int flags,
int init_val, int upper_bound, int lower_bound, char * alt_name) {
int init_val, int upper_bound, int lower_bound, char * alt_name)
{
Param * param;
CValue iv, ub, lb;
Param * param;
CValue iv, ub, lb;
iv.int_val = init_val;
ub.int_val = upper_bound;
lb.int_val = lower_bound;
iv.int_val = init_val;
ub.int_val = upper_bound;
lb.int_val = lower_bound;
param = new Param(name, P_TYPE_INT, flags, engine_val, NULL, iv, ub, lb);
param = new Param(name, P_TYPE_INT, flags, engine_val, NULL, iv, ub, lb);
if (param == NULL) {
return PROJECTM_OUTOFMEM_ERROR;
}
if (param == NULL)
{
return PROJECTM_OUTOFMEM_ERROR;
}
if (insert_builtin_param( param ) < 0) {
delete param;
return PROJECTM_ERROR;
}
if (insert_builtin_param( param ) < 0)
{
delete param;
return PROJECTM_ERROR;
}
if (alt_name != NULL) {
insert_param_alt_name(param,alt_name);
}
if (alt_name != NULL)
{
insert_param_alt_name(param,alt_name);
}
return PROJECTM_SUCCESS;
return PROJECTM_SUCCESS;
}
/* Loads a boolean parameter */
int BuiltinParams::load_builtin_param_bool(char * name, void * engine_val, short int flags,
int init_val, char * alt_name) {
int init_val, char * alt_name)
{
Param * param;
CValue iv, ub, lb;
Param * param;
CValue iv, ub, lb;
iv.int_val = init_val;
ub.int_val = TRUE;
lb.int_val = FALSE;
iv.int_val = init_val;
ub.int_val = TRUE;
lb.int_val = FALSE;
param = new Param(name, P_TYPE_BOOL, flags, engine_val, NULL, iv, ub, lb);
param = new Param(name, P_TYPE_BOOL, flags, engine_val, NULL, iv, ub, lb);
if (param == NULL) {
return PROJECTM_OUTOFMEM_ERROR;
}
if (param == NULL)
{
return PROJECTM_OUTOFMEM_ERROR;
}
if (insert_builtin_param(param) < 0) {
delete param;
return PROJECTM_ERROR;
}
if (insert_builtin_param(param) < 0)
{
delete param;
return PROJECTM_ERROR;
}
if (alt_name != NULL) {
insert_param_alt_name(param,alt_name);
}
if (alt_name != NULL)
{
insert_param_alt_name(param,alt_name);
}
return PROJECTM_SUCCESS;
return PROJECTM_SUCCESS;
}
/* Inserts a parameter into the builtin database */
int BuiltinParams::insert_builtin_param( Param *param ) {
int BuiltinParams::insert_builtin_param( Param *param )
{
return builtin_param_tree->splay_insert(param, param->name);
return builtin_param_tree->splay_insert(param, param->name);
}
/* Initialize the builtin parameter database.
Should only be necessary once */
int BuiltinParams::init_builtin_param_db(const PresetInputs & presetInputs, PresetOutputs & presetOutputs) {
int BuiltinParams::init_builtin_param_db(const PresetInputs & presetInputs, PresetOutputs & presetOutputs)
{
/* Create the builtin parameter splay tree (go Sleator...) */
if ((this->builtin_param_tree = SplayTree<Param>::create_splaytree((int (*)(const void*,const void*))SplayKeyFunctions::compare_string,(void* (*)(void*)) SplayKeyFunctions::copy_string, (void (*)(void*))SplayKeyFunctions::free_string)) == NULL) {
if (BUILTIN_PARAMS_DEBUG) printf("init_builtin_param_db: failed to initialize database (FATAL)\n");
return PROJECTM_OUTOFMEM_ERROR;
}
/* Create the builtin parameter splay tree (go Sleator...) */
if ((this->builtin_param_tree = std::map<std::string,Param*>::create_splaytree((int (*)(const void*,const void*))SplayKeyFunctions::compare_string,(void* (*)(void*)) SplayKeyFunctions::copy_string, (void (*)(void*))SplayKeyFunctions::free_string)) == NULL)
{
if (BUILTIN_PARAMS_DEBUG) printf("init_builtin_param_db: failed to initialize database (FATAL)\n");
return PROJECTM_OUTOFMEM_ERROR;
}
if (BUILTIN_PARAMS_DEBUG) {
printf("init_builtin_param: loading database...");
fflush(stdout);
}
if (BUILTIN_PARAMS_DEBUG)
{
printf("init_builtin_param: loading database...");
fflush(stdout);
}
/* Loads all builtin parameters into the database */
if (load_all_builtin_param(presetInputs, presetOutputs) < 0) {
if (BUILTIN_PARAMS_DEBUG) printf("failed loading builtin parameters (FATAL)\n");
return PROJECTM_ERROR;
}
/* Loads all builtin parameters into the database */
if (load_all_builtin_param(presetInputs, presetOutputs) < 0)
{
if (BUILTIN_PARAMS_DEBUG) printf("failed loading builtin parameters (FATAL)\n");
return PROJECTM_ERROR;
}
if (BUILTIN_PARAMS_DEBUG) printf("success!\n");
if (BUILTIN_PARAMS_DEBUG) printf("success!\n");
/* Finished, no errors */
return PROJECTM_SUCCESS;
/* Finished, no errors */
return PROJECTM_SUCCESS;
}
/* Loads all builtin parameters, limits are also defined here */
int BuiltinParams::load_all_builtin_param(const PresetInputs & presetInputs, PresetOutputs & presetOutputs) {
int BuiltinParams::load_all_builtin_param(const PresetInputs & presetInputs, PresetOutputs & presetOutputs)
{
load_builtin_param_float("fRating", (void*)&presetOutputs.fRating, NULL, P_FLAG_NONE, 0.0 , 5.0, 0.0, NULL);
load_builtin_param_float("fWaveScale", (void*)&presetOutputs.fWaveScale, NULL, P_FLAG_NONE, 0.0, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, NULL);
@ -219,18 +258,18 @@ int BuiltinParams::load_all_builtin_param(const PresetInputs & presetInputs, Pre
load_builtin_param_float("echo_zoom", (void*)&presetOutputs.fVideoEchoZoom, NULL, P_FLAG_NONE, 0.0, MAX_DOUBLE_SIZE, 0, "fVideoEchoZoom");
load_builtin_param_float("echo_alpha", (void*)&presetOutputs.fVideoEchoAlpha, NULL, P_FLAG_NONE, 0.0, MAX_DOUBLE_SIZE, 0, "fVideoEchoAlpha");
load_builtin_param_float("wave_a", (void*)&presetOutputs.fWaveAlpha, NULL, P_FLAG_NONE, 0.0, 1.0, 0, "fWaveAlpha");
load_builtin_param_float("fWaveSmoothing", (void*)&presetOutputs.fWaveSmoothing, NULL, P_FLAG_NONE, 0.0, 1.0, -1.0, NULL);
load_builtin_param_float("fWaveSmoothing", (void*)&presetOutputs.fWaveSmoothing, NULL, P_FLAG_NONE, 0.0, 1.0, -1.0, NULL);
load_builtin_param_float("fModWaveAlphaStart", (void*)&presetOutputs.fModWaveAlphaStart, NULL, P_FLAG_NONE, 0.0, 1.0, -1.0, NULL);
load_builtin_param_float("fModWaveAlphaEnd", (void*)&presetOutputs.fModWaveAlphaEnd, NULL, P_FLAG_NONE, 0.0, 1.0, -1.0, NULL);
load_builtin_param_float("fWarpAnimSpeed", (void*)&presetOutputs.fWarpAnimSpeed, NULL, P_FLAG_NONE, 0.0, 1.0, -1.0, NULL);
// load_builtin_param_float("warp", (void*)&presetOutputs.warp, warp_mesh, P_FLAG_NONE, 0.0, MAX_DOUBLE_SIZE, 0, NULL);
load_builtin_param_float("fShader", (void*)&presetOutputs.fShader, NULL, P_FLAG_NONE, 0.0, 1.0, -1.0, NULL);
load_builtin_param_float("decay", (void*)&presetOutputs.decay, NULL, P_FLAG_NONE, 0.0, 1.0, 0, "fDecay");
load_builtin_param_int("echo_orient", (void*)&presetOutputs.nVideoEchoOrientation, P_FLAG_NONE, 0, 3, 0, "nVideoEchoOrientation");
load_builtin_param_int("wave_mode", (void*)&presetOutputs.nWaveMode, P_FLAG_NONE, 0, 7, 0, "nWaveMode");
load_builtin_param_bool("wave_additive", (void*)&presetOutputs.bAdditiveWaves, P_FLAG_NONE, FALSE, "bAdditiveWaves");
load_builtin_param_bool("bModWaveAlphaByVolume", (void*)&presetOutputs.bModWaveAlphaByVolume, P_FLAG_NONE, FALSE, NULL);
load_builtin_param_bool("wave_brighten", (void*)&presetOutputs.bMaximizeWaveColor, P_FLAG_NONE, FALSE, "bMaximizeWaveColor");
@ -248,7 +287,7 @@ int BuiltinParams::load_all_builtin_param(const PresetInputs & presetInputs, Pre
load_builtin_param_float("zoom", (void*)&presetOutputs.zoom, presetOutputs.zoom_mesh, P_FLAG_PER_PIXEL |P_FLAG_DONT_FREE_MATRIX, 0.0, MAX_DOUBLE_SIZE, 0, NULL);
load_builtin_param_float("rot", (void*)&presetOutputs.rot, presetOutputs.rot_mesh, P_FLAG_PER_PIXEL |P_FLAG_DONT_FREE_MATRIX, 0.0, MAX_DOUBLE_SIZE, MIN_DOUBLE_SIZE, NULL);
load_builtin_param_float("zoomexp", (void*)&presetOutputs.zoomexp, presetOutputs.zoomexp_mesh, P_FLAG_PER_PIXEL |P_FLAG_NONE, 0.0, MAX_DOUBLE_SIZE, 0, "fZoomExponent");
load_builtin_param_float("cx", (void*)&presetOutputs.cx, presetOutputs.cx_mesh, P_FLAG_PER_PIXEL | P_FLAG_DONT_FREE_MATRIX, 0.0, 1.0, 0, NULL);
load_builtin_param_float("cy", (void*)&presetOutputs.cy, presetOutputs.cy_mesh, P_FLAG_PER_PIXEL | P_FLAG_DONT_FREE_MATRIX, 0.0, 1.0, 0, NULL);
load_builtin_param_float("dx", (void*)&presetOutputs.dx, presetOutputs.dx_mesh, P_FLAG_PER_PIXEL | P_FLAG_DONT_FREE_MATRIX, 0.0, MAX_DOUBLE_SIZE, MIN_DOUBLE_SIZE, NULL);
@ -262,7 +301,7 @@ int BuiltinParams::load_all_builtin_param(const PresetInputs & presetInputs, Pre
load_builtin_param_float("wave_x", (void*)&presetOutputs.wave_x, NULL, P_FLAG_NONE, 0.0, 1.0, 0.0, NULL);
load_builtin_param_float("wave_y", (void*)&presetOutputs.wave_y, NULL, P_FLAG_NONE, 0.0, 1.0, 0.0, NULL);
load_builtin_param_float("wave_mystery", (void*)&presetOutputs.wave_mystery, NULL, P_FLAG_NONE, 0.0, 1.0, -1.0, "fWaveParam");
load_builtin_param_float("ob_size", (void*)&presetOutputs.ob_size, NULL, P_FLAG_NONE, 0.0, 0.5, 0, NULL);
load_builtin_param_float("ob_r", (void*)&presetOutputs.ob_r, NULL, P_FLAG_NONE, 0.0, 1.0, 0.0, NULL);
load_builtin_param_float("ob_g", (void*)&presetOutputs.ob_g, NULL, P_FLAG_NONE, 0.0, 1.0, 0.0, NULL);
@ -295,14 +334,14 @@ int BuiltinParams::load_all_builtin_param(const PresetInputs & presetInputs, Pre
load_builtin_param_float("progress", (void*)&presetInputs.progress, NULL,P_FLAG_READONLY, 0.0, 1, 0, NULL);
load_builtin_param_int("fps", (void*)&presetInputs.fps, P_FLAG_READONLY, 15, MAX_INT_SIZE, 0, NULL);
load_builtin_param_float("x", (void*)&presetInputs.x_per_pixel, presetInputs.x_mesh, P_FLAG_PER_PIXEL |P_FLAG_ALWAYS_MATRIX | P_FLAG_READONLY | P_FLAG_DONT_FREE_MATRIX,
0, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, NULL);
load_builtin_param_float("y", (void*)&presetInputs.y_per_pixel, presetInputs.y_mesh, P_FLAG_PER_PIXEL |P_FLAG_ALWAYS_MATRIX |P_FLAG_READONLY | P_FLAG_DONT_FREE_MATRIX,
0, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, NULL);
load_builtin_param_float("ang", (void*)&presetInputs.ang_per_pixel, presetInputs.theta_mesh, P_FLAG_PER_PIXEL |P_FLAG_ALWAYS_MATRIX | P_FLAG_READONLY | P_FLAG_DONT_FREE_MATRIX,
0, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, NULL);
load_builtin_param_float("x", (void*)&presetInputs.x_per_pixel, presetInputs.x_mesh, P_FLAG_PER_PIXEL |P_FLAG_ALWAYS_MATRIX | P_FLAG_READONLY | P_FLAG_DONT_FREE_MATRIX,
0, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, NULL);
load_builtin_param_float("y", (void*)&presetInputs.y_per_pixel, presetInputs.y_mesh, P_FLAG_PER_PIXEL |P_FLAG_ALWAYS_MATRIX |P_FLAG_READONLY | P_FLAG_DONT_FREE_MATRIX,
0, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, NULL);
load_builtin_param_float("ang", (void*)&presetInputs.ang_per_pixel, presetInputs.theta_mesh, P_FLAG_PER_PIXEL |P_FLAG_ALWAYS_MATRIX | P_FLAG_READONLY | P_FLAG_DONT_FREE_MATRIX,
0, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, NULL);
load_builtin_param_float("rad", (void*)&presetInputs.rad_per_pixel, presetInputs.rad_mesh, P_FLAG_PER_PIXEL |P_FLAG_ALWAYS_MATRIX | P_FLAG_READONLY | P_FLAG_DONT_FREE_MATRIX,
0, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, NULL);
0, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, NULL);
load_builtin_param_float("q1", (void*)&presetOutputs.q1, NULL, P_FLAG_PER_PIXEL |P_FLAG_QVAR, 0, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, NULL);
load_builtin_param_float("q2", (void*)&presetOutputs.q2, NULL, P_FLAG_PER_PIXEL |P_FLAG_QVAR, 0, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, NULL);
@ -319,4 +358,4 @@ int BuiltinParams::load_all_builtin_param(const PresetInputs & presetInputs, Pre
return PROJECTM_SUCCESS;
}
}