Introduce template instance concept to simplify freeing memory
[tedtools.git] / tmpltest.c
index a605f0b..57d4491 100644 (file)
@@ -57,7 +57,7 @@ outfunc(char *str, int len) {
 static int counter = 0;
 
 static VariableValue 
-localCounter(Template tmpl, int nargs, VariableValue *args) {
+localCounter(TemplateInstance tmpl, int nargs, VariableValue *args) {
        VariableValue out = tmalloc(sizeof(VariableValue));
 
        out->type = valueInt;
@@ -75,6 +75,7 @@ main(int argn, char *argv[]) {
        MemoryContext   *base;
        char                    *name = NULL;
        TemplateData    template;
+       TemplateInstance tinstance;
        int                     i,j,k;
        int                             cnt=0;
        executeFunctionDescData funcs[] = {
@@ -108,93 +109,94 @@ main(int argn, char *argv[]) {
        printf("initTemplate: %d\n",  initTemplate(&template, base, funcs, ".", name) );
        /* dumpTemplate(&template); */
 
-       setTemplateValueInt(&template, "ID", 17);
-       setTemplateValueUndefined(&template, "emptyID");
-       setTemplateValueInt(&template, "zeroid", 0);
-       setTemplateValueString(&template, "str", "QWERTY");
+       tinstance = newTemplateInstance(&template, NULL);
 
-       addTemplateRow(&template, "outerLoop");
-       setTemplateValueString(&template, "outerLoop.data1", "ha1");
-       setTemplateValueUndefined(&template, "outerLoop.data2");
+       setTemplateValueInt(tinstance, "ID", 17);
+       setTemplateValueUndefined(tinstance, "emptyID");
+       setTemplateValueInt(tinstance, "zeroid", 0);
+       setTemplateValueString(tinstance, "str", "QWERTY");
 
-       addTemplateRow(&template, "outerLoop");
-       setTemplateValueInt(&template, "outerLoop.data1", 10);
-       setTemplateValueString(&template, "outerLoop.data2", "WOW");
-               addTemplateRow(&template, "outerLoop.innerLoop");
-               setTemplateValueString(&template, "outerLoop.innerLoop.camenty", "Number 1");
-               addTemplateRow(&template, "outerLoop.innerLoop");
-               setTemplateValueString(&template, "outerLoop.innerLoop.camenty", "Number 2");
+       addTemplateRow(tinstance, "outerLoop");
+       setTemplateValueString(tinstance, "outerLoop.data1", "ha1");
+       setTemplateValueUndefined(tinstance, "outerLoop.data2");
 
-       addTemplateRow(&template, "outerLoop");
-       setTemplateValueString(&template, "outerLoop.data1", "ha3");
+       addTemplateRow(tinstance, "outerLoop");
+       setTemplateValueInt(tinstance, "outerLoop.data1", 10);
+       setTemplateValueString(tinstance, "outerLoop.data2", "WOW");
+               addTemplateRow(tinstance, "outerLoop.innerLoop");
+               setTemplateValueString(tinstance, "outerLoop.innerLoop.camenty", "Number 1");
+               addTemplateRow(tinstance, "outerLoop.innerLoop");
+               setTemplateValueString(tinstance, "outerLoop.innerLoop.camenty", "Number 2");
+
+       addTemplateRow(tinstance, "outerLoop");
+       setTemplateValueString(tinstance, "outerLoop.data1", "ha3");
 
        template.printString = outfunc;
-       printTemplate( &template );
+       printTemplate( tinstance );
 
-       resetTemplate(&template);
+       tinstance = newTemplateInstance(&template, NULL);
 
-       setTemplateValueInt(&template, "ID", 23);
-       setTemplateValueUndefined(&template, "emptyID");
-       setTemplateValueInt(&template, "zeroid", 0);
-       addTemplateRow(&template, "outerLoop");
-       setTemplateValueString(&template, "outerLoop.data1", "ha1");
-       setTemplateValueInt(&template, "outerLoop.data1", 1234);
-       setTemplateValueString(&template, "outerLoop.data2", "FOO");
-       addTemplateRow(&template, "outerLoop.innerLoop");
-               setTemplateValueString(&template, "outerLoop.innerLoop.camenty", "Again 1");
+       setTemplateValueInt(tinstance, "ID", 23);
+       setTemplateValueUndefined(tinstance, "emptyID");
+       setTemplateValueInt(tinstance, "zeroid", 0);
+       addTemplateRow(tinstance, "outerLoop");
+       setTemplateValueString(tinstance, "outerLoop.data1", "ha1");
+       setTemplateValueInt(tinstance, "outerLoop.data1", 1234);
+       setTemplateValueString(tinstance, "outerLoop.data2", "FOO");
+       addTemplateRow(tinstance, "outerLoop.innerLoop");
+               setTemplateValueString(tinstance, "outerLoop.innerLoop.camenty", "Again 1");
 
        for(i=0;i<3;i++) {
-               addTemplateRow(&template,"selfLoop");
-               setTemplateValueInt(&template, "selfLoop.CNT", ++cnt);
-               setTemplateValueString(&template, "selfLoop.NODE", "outer");
+               addTemplateRow(tinstance,"selfLoop");
+               setTemplateValueInt(tinstance, "selfLoop.CNT", ++cnt);
+               setTemplateValueString(tinstance, "selfLoop.NODE", "outer");
 
                if (i<1) {
-                       addTemplateRow(&template,"selfLoop.oneloop");
-                       setTemplateValueInt(&template, "selfLoop.oneloop.CNT", ++cnt);
-                       setTemplateValueString(&template, "selfLoop.oneloop.NODE", "subloop1");
+                       addTemplateRow(tinstance,"selfLoop.oneloop");
+                       setTemplateValueInt(tinstance, "selfLoop.oneloop.CNT", ++cnt);
+                       setTemplateValueString(tinstance, "selfLoop.oneloop.NODE", "subloop1");
                }
                if (i<2) {
-                       addTemplateRow(&template,"selfLoop.oneloop");
-                       setTemplateValueInt(&template, "selfLoop.oneloop.CNT", ++cnt);
-                       setTemplateValueString(&template, "selfLoop.oneloop.NODE", "subloop2");
+                       addTemplateRow(tinstance,"selfLoop.oneloop");
+                       setTemplateValueInt(tinstance, "selfLoop.oneloop.CNT", ++cnt);
+                       setTemplateValueString(tinstance, "selfLoop.oneloop.NODE", "subloop2");
                }
 
-               addTemplateNestedLoop(&template, "selfLoop");
+               addTemplateNestedLoop(tinstance, "selfLoop");
        
                for(j=0;j<2;j++) {
-                       addTemplateRow(&template,"selfLoop");
-                       setTemplateValueInt(&template, "selfLoop.CNT", ++cnt);
-                       setTemplateValueString(&template, "selfLoop.NODE", "inner");
+                       addTemplateRow(tinstance,"selfLoop");
+                       setTemplateValueInt(tinstance, "selfLoop.CNT", ++cnt);
+                       setTemplateValueString(tinstance, "selfLoop.NODE", "inner");
                        if ( i==1 && j==0 ) {
-                               addTemplateRow(&template,"selfLoop.oneloop");
-                               setTemplateValueInt(&template, "selfLoop.oneloop.CNT", ++cnt);
-                               setTemplateValueString(&template, "selfLoop.oneloop.NODE", "subloop3");
+                               addTemplateRow(tinstance,"selfLoop.oneloop");
+                               setTemplateValueInt(tinstance, "selfLoop.oneloop.CNT", ++cnt);
+                               setTemplateValueString(tinstance, "selfLoop.oneloop.NODE", "subloop3");
                        }
                        if (i==2 && j==1) {
-                               addTemplateNestedLoop(&template, "selfLoop");
+                               addTemplateNestedLoop(tinstance, "selfLoop");
                                for(k=0;k<4;k++) {
-                                       addTemplateRow(&template,"selfLoop");
-                                       setTemplateValueInt(&template, "selfLoop.CNT", ++cnt);
-                                       setTemplateValueString(&template, "selfLoop.NODE", "innerst");
+                                       addTemplateRow(tinstance,"selfLoop");
+                                       setTemplateValueInt(tinstance, "selfLoop.CNT", ++cnt);
+                                       setTemplateValueString(tinstance, "selfLoop.NODE", "innerst");
                                        if ( k==2 ) {
-                                               addTemplateRow(&template,"selfLoop.oneloop");
-                                               setTemplateValueInt(&template, "selfLoop.oneloop.CNT", ++cnt);
-                                               setTemplateValueString(&template, "selfLoop.oneloop.NODE", "subloop4");
+                                               addTemplateRow(tinstance,"selfLoop.oneloop");
+                                               setTemplateValueInt(tinstance, "selfLoop.oneloop.CNT", ++cnt);
+                                               setTemplateValueString(tinstance, "selfLoop.oneloop.NODE", "subloop4");
                                        }
                                }
-                               returnTemplateNestedLoop(&template, "selfLoop");
+                               returnTemplateNestedLoop(tinstance, "selfLoop");
                        }
                }
        
 
-               returnTemplateNestedLoop(&template, "selfLoop");
+               returnTemplateNestedLoop(tinstance, "selfLoop");
        }
 
        fputs("================================================\n", stdout);
-       printTemplate( &template );
+       printTemplate( tinstance );
 
 
-       resetTemplate(&template);
        freeTemplate(&template);
 
        return 0;