auto-sync
This commit is contained in:
parent
f7c3f9da20
commit
d6f74ca7b4
|
@ -16,6 +16,7 @@ public:
|
||||||
void push(T value);
|
void push(T value);
|
||||||
void reset();
|
void reset();
|
||||||
T pop();
|
T pop();
|
||||||
|
T get(int index);
|
||||||
int size();
|
int size();
|
||||||
bool isEmpty();
|
bool isEmpty();
|
||||||
private:
|
private:
|
||||||
|
@ -48,6 +49,10 @@ T FLStack<T, MAXSIZE>::pop() {
|
||||||
return values[--index];
|
return values[--index];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename T, int MAXSIZE>
|
||||||
|
T FLStack<T, MAXSIZE>::get(int index) {
|
||||||
|
return values[index];
|
||||||
|
}
|
||||||
|
|
||||||
template<typename T, int MAXSIZE>
|
template<typename T, int MAXSIZE>
|
||||||
int FLStack<T, MAXSIZE>::size() {
|
int FLStack<T, MAXSIZE>::size() {
|
||||||
|
|
|
@ -28,7 +28,12 @@ void LEElement::init(le_action_e action, float fValue) {
|
||||||
}
|
}
|
||||||
|
|
||||||
LECalculator::LECalculator() {
|
LECalculator::LECalculator() {
|
||||||
|
reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
void LECalculator::reset() {
|
||||||
first = NULL;
|
first = NULL;
|
||||||
|
stack.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool float2bool(float v) {
|
static bool float2bool(float v) {
|
||||||
|
@ -114,3 +119,15 @@ void LECalculator::add(LEElement *element) {
|
||||||
last->next = element;
|
last->next = element;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LEElementPool::LEElementPool() {
|
||||||
|
reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
void LEElementPool::reset() {
|
||||||
|
index = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
LEElement *LEElementPool::next() {
|
||||||
|
return &pool[index++];
|
||||||
|
}
|
||||||
|
|
|
@ -21,6 +21,11 @@ typedef enum {
|
||||||
LE_OPERATOR_AND,
|
LE_OPERATOR_AND,
|
||||||
LE_OPERATOR_OR,
|
LE_OPERATOR_OR,
|
||||||
|
|
||||||
|
LE_METHOD_RPM,
|
||||||
|
LE_METHOD_COOLANT,
|
||||||
|
LE_METHOD_FAN,
|
||||||
|
LE_METHOD_TIME_SINCE_BOOT,
|
||||||
|
|
||||||
Force_4b_le_action = ENUM_SIZE_HACK,
|
Force_4b_le_action = ENUM_SIZE_HACK,
|
||||||
} le_action_e;
|
} le_action_e;
|
||||||
|
|
||||||
|
@ -38,6 +43,18 @@ public:
|
||||||
LEElement *next;
|
LEElement *next;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define LE_ELEMENT_POOL_SIZE 64
|
||||||
|
|
||||||
|
class LEElementPool {
|
||||||
|
public:
|
||||||
|
LEElementPool();
|
||||||
|
LEElement pool[LE_ELEMENT_POOL_SIZE];
|
||||||
|
LEElement *next();
|
||||||
|
void reset();
|
||||||
|
private:
|
||||||
|
int index;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
#define MAX_STACK_DEPTH 32
|
#define MAX_STACK_DEPTH 32
|
||||||
|
|
||||||
|
@ -46,10 +63,11 @@ public:
|
||||||
LECalculator();
|
LECalculator();
|
||||||
float getValue();
|
float getValue();
|
||||||
void add(LEElement *element);
|
void add(LEElement *element);
|
||||||
LEElement *first;
|
void reset();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void doJob(LEElement *element);
|
void doJob(LEElement *element);
|
||||||
|
LEElement *first;
|
||||||
FLStack<float, MAX_STACK_DEPTH> stack;
|
FLStack<float, MAX_STACK_DEPTH> stack;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -37,6 +37,31 @@ void testLogicExpressions(void) {
|
||||||
* fuel_pump = time_since_boot 4 less rpm 0 more OR
|
* fuel_pump = time_since_boot 4 less rpm 0 more OR
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
c.reset();
|
||||||
|
|
||||||
|
LEElementPool pool;
|
||||||
|
LEElement *e = pool.next();
|
||||||
|
e->init(LE_METHOD_TIME_SINCE_BOOT);
|
||||||
|
|
||||||
|
e = pool.next();
|
||||||
|
e->init(LE_NUMERIC_VALUE, 4);
|
||||||
|
|
||||||
|
e = pool.next();
|
||||||
|
e->init(LE_OPERATOR_LESS);
|
||||||
|
|
||||||
|
e = pool.next();
|
||||||
|
e->init(LE_METHOD_RPM);
|
||||||
|
|
||||||
|
e = pool.next();
|
||||||
|
e->init(LE_NUMERIC_VALUE, 0);
|
||||||
|
|
||||||
|
e = pool.next();
|
||||||
|
e->init(LE_OPERATOR_MORE);
|
||||||
|
|
||||||
|
e = pool.next();
|
||||||
|
e->init(LE_OPERATOR_OR);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* fan = (not fan && coolant > 90) OR (fan && coolant > 85)
|
* fan = (not fan && coolant > 90) OR (fan && coolant > 85)
|
||||||
* fan = fan NOT coolant 90 AND more fan coolant 85 more AND OR
|
* fan = fan NOT coolant 90 AND more fan coolant 85 more AND OR
|
||||||
|
|
|
@ -319,6 +319,7 @@ void testFLStack(void) {
|
||||||
int v = stack.pop();
|
int v = stack.pop();
|
||||||
assertEquals(234, v);
|
assertEquals(234, v);
|
||||||
assertEquals(1, stack.size());
|
assertEquals(1, stack.size());
|
||||||
|
assertEquals(123, stack.get(0));
|
||||||
|
|
||||||
v = stack.pop();
|
v = stack.pop();
|
||||||
assertEquals(123, v);
|
assertEquals(123, v);
|
||||||
|
|
Loading…
Reference in New Issue