Statistics
| Revision:

root / logic / trunk / src / logics / conditions.c @ 40

History | View | Annotate | Download (2.83 KB)

1 36 Janez1
#include "conditions.h"
2 40 Janez1
#include <stdio.h>
3 36 Janez1
4 40 Janez1
int evaluateAdditionalConditions(cond_lst *cl, device *dev)
5 36 Janez1
{
6 40 Janez1
    int result = -1;
7
    int local_result = -1;
8
    cond_lst *leaf;
9
    device *testDev;
10
11
    //printf("dev %s\n",dev->id);
12
    if(cl->OPERATOR_TYPE == TOP_NODE)
13
        if(!cl->sub_lst) // no additional conditions
14
            return 1;
15
        else{}
16
    //printf("Evaluating operator %d\n", cl->OPERATOR_TYPE);
17
    while(cl->sub_lst)
18 36 Janez1
    {
19 40 Janez1
        if(!cl->sub_lst->sub_lst) //leaf
20 36 Janez1
        {
21 40 Janez1
            //printf("Found leaf with opr %d\n", cl->sub_lst->OPERATOR_TYPE);
22
            //todo glej cez cel sub - nivo
23
            if(result==-1) //got first leaf element
24
            {
25
                //printf("got FIRST LEAF element with opr %d and device name %s\n", cl->sub_lst->OPERATOR_TYPE, cl->sub_lst->dev);
26
                if(0==strcmp(cl->sub_lst->dev,"time"))
27
                    result = evalOperators(cl->sub_lst->OPERATOR_TYPE, getLocalFormattedTime(), cl->sub_lst->value);
28
                else
29
                    result = evalOperators(cl->sub_lst->OPERATOR_TYPE, (*getDevice(dev, cl->sub_lst->dev)).buf, cl->sub_lst->value);
30
            }
31
            else
32
            {
33
                //printf("got LEAF element with opr %d\n", cl->sub_lst->OPERATOR_TYPE);
34
                if(0==strcmp(cl->sub_lst->dev,"time"))
35
                    local_result = evalOperators(cl->sub_lst->OPERATOR_TYPE, getLocalFormattedTime(), cl->sub_lst->value);
36
                else
37
                    local_result = evalOperators(cl->sub_lst->OPERATOR_TYPE, (*getDevice(dev, cl->sub_lst->dev)).buf, cl->sub_lst->value);
38
                result = evalOperators(cl->OPERATOR_TYPE, result, local_result);
39
            }
40 36 Janez1
        }
41 40 Janez1
        else //not leaf
42
        {
43
            //printf("Found child with opr %d\n", cl->sub_lst->OPERATOR_TYPE);
44
            if(result==-1) //got first child element
45
            {
46
                //printf("got FIRST CHILD element with opr %d\n", cl->sub_lst->OPERATOR_TYPE);
47
                result = evaluateAdditionalConditions(cl->sub_lst, dev);
48
            }
49
            else
50
            {
51
                //printf("got CHILD element with opr %d\n", cl->sub_lst->OPERATOR_TYPE);
52
                result = evaluateAdditionalConditions(cl->sub_lst, dev);
53
                result = evalOperators(cl->OPERATOR_TYPE, result, local_result);
54
            }
55
        }
56
        cl->sub_lst=cl->sub_lst->nxt_lst;
57 36 Janez1
    }
58 40 Janez1
    return result;
59 36 Janez1
}
60
61 40 Janez1
// TODO check this one again
62
float getNewWeightedMeasurement(float oldval, float newval, float alpha)
63
{
64
    printf("getNewWeightedMeasurement(float oldval, float newval, float alpha)\n");
65
    printf("=== buffer %f, device buffer %f, alpha %f\n", oldval, newval, alpha);
66
    printf("%f\n",oldval*alpha+newval*(1-alpha));
67
    return oldval*alpha+newval*(1-alpha);
68
}
69 36 Janez1
/*TODO morda dodaj preverbo pravilnosti conditionov (kot podatkov v strukturi)*/