Revision 40 logic/trunk/src/logics/conditions.c

View differences:

conditions.c
1 1
#include "conditions.h"
2
#include <stdio.h>
2 3

  
3
int getConditionsResult(cond_lst *cl)
4
int evaluateAdditionalConditions(cond_lst *cl, device *dev)
4 5
{
5
    // TODO dodaj izracun stanja, vrne naj 1 ali 0
6
    //*
7
    while(cl)
6
    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)
8 18
    {
9
        /*
10
        printf("=== cl address \t\t%d\n",&cl->OPERATOR_TYPE);
11
        printf("cl->OPERATOR_TYPE \t%d\n",cl->OPERATOR_TYPE);
12
        printf("cl->dev \t\t%s\n",cl->dev);
13
        printf("cl->nxt_lst \t\t%d\n",cl->nxt_lst);
14
        printf("cl->sub_lst \t\t%d\n",cl->sub_lst);
15
        printf("cl->value \t\t%d\n",cl->value);
16
        /**/
17
        if(cl->sub_lst)
19
        if(!cl->sub_lst->sub_lst) //leaf
18 20
        {
19
            //cl2=cl->sub_lst;
20
            getConditionsResult(cl->sub_lst);
21
            //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
            }
21 40
        }
22
        cl=cl->nxt_lst;
41
        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;
23 57
    }
24
    return 0;
58
    return result;
25 59
}
26 60

  
61
// 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
}
27 69
/*TODO morda dodaj preverbo pravilnosti conditionov (kot podatkov v strukturi)*/

Also available in: Unified diff