You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
1.8 KiB
80 lines
1.8 KiB
// -*- tab-width: 4; Mode: C++; c-basic-offset: 4; indent-tabs-mode: t -*- |
|
// |
|
// This is free software; you can redistribute it and/or modify it under |
|
// the terms of the GNU Lesser General Public License as published by the |
|
// Free Software Foundation; either version 2.1 of the License, or (at |
|
// your option) any later version. |
|
// |
|
/// The AP variable interface. This allows different types |
|
/// of variables to be passed to blocks for floating point |
|
/// math, memory management, etc. |
|
|
|
#include "AP_Var.h" |
|
|
|
const AP_Float AP_GainUnity(1.0); |
|
const AP_Float AP_GainNegativeUnity(-1.0); |
|
const AP_Float AP_Zero(0); |
|
|
|
// |
|
// Lookup interface for variables. |
|
// |
|
AP_VarBase *AP_VarBase::_variables = NULL; |
|
AP_VarBase *AP_VarBase::_lookupHint = NULL; |
|
int AP_VarBase::_lookupHintIndex = 0; |
|
|
|
AP_VarBase * |
|
AP_VarBase::lookup(int index) |
|
{ |
|
AP_VarBase *p; |
|
int i; |
|
|
|
// establish initial search state |
|
if (_lookupHintIndex && // we have a cached hint |
|
(index >= _lookupHintIndex)) { // the desired index is at or after the hint |
|
|
|
p = _lookupHint; // start at the hint point |
|
i = index - _lookupHintIndex; // count only the distance from the hint to the index |
|
} else { |
|
|
|
p = _variables; // start at the beginning of the list |
|
i = index; // count to the index |
|
} |
|
|
|
// search |
|
while (index-- && p) // count until we hit the index or the end of the list |
|
p = p->_link; |
|
|
|
// update the cache on hit |
|
if (p) { |
|
_lookupHintIndex = i; |
|
_lookupHint = p; |
|
} |
|
|
|
return(p); |
|
} |
|
|
|
// Save all variables that have an identity. |
|
// |
|
void |
|
AP_VarBase::save_all(void) |
|
{ |
|
AP_VarBase *p = _variables; |
|
|
|
while (p) { |
|
p->save(); |
|
p = p->_link; |
|
} |
|
} |
|
|
|
// Load all variables that have an identity. |
|
// |
|
void |
|
AP_VarBase::load_all(void) |
|
{ |
|
AP_VarBase *p = _variables; |
|
|
|
while (p) { |
|
p->load(); |
|
p = p->_link; |
|
} |
|
}
|
|
|