Changeset 1560 for trunk/examples/objects
- Timestamp:
- Aug 28, 2009, 5:54:24 AM (15 years ago)
- Location:
- trunk/examples/objects
- Files:
-
- 7 added
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/examples/objects/Makefile.in
r1528 r1560 18 18 axis \ 19 19 curve \ 20 dxReader \ 20 21 dxWriter \ 21 22 floatBuffer \ -
trunk/examples/objects/app-fermi/fermi1.cc
r1542 r1560 74 74 75 75 // do it the easy way, 76 // create a plot toadd to the library76 // create a plot and add to the library 77 77 // p1->add(nPts,xArr,yArr,format,curveLabel,curveDesc); 78 78 79 Rappture::Plot *p1 = new Rappture::Plot( );79 Rappture::Plot *p1 = new Rappture::Plot(lib); 80 80 p1->add(nPts,fArr,EArr,"",curveLabel,curveDesc); 81 81 p1.propstr("xlabel","Fermi-Dirac Factor"); 82 82 p1.propstr("ylabel","Energy"); 83 83 p1.propstr("yunits","eV"); 84 85 // add the plot to the library86 lib.put(p1);87 84 88 85 … … 91 88 // c1->axis("xaxis","xlabel","xdesc","units","scale",dataArr,nPts); 92 89 93 Rappture::Curve *c1 = new Rappture::Curve( "output.curve(FDF)");90 Rappture::Curve *c1 = new Rappture::Curve(lib,"FDF"); 94 91 c1->label(curveLabel); 95 92 c1->desc(curveDesc); -
trunk/examples/objects/app-fermi/fermi2.cc
r1542 r1560 25 25 Rappture::Number *T = NULL; 26 26 Rappture::Number *Ef = NULL; 27 double E = 0.0;28 27 double dE = 0.0; 29 28 double kT = 0.0; 30 29 double Emin = 0.0; 31 30 double Emax = 0.0; 32 double f = 0.0; 31 size_t nPts = 200; 32 double E[nPts]; 33 double f[nPts]; 33 34 34 35 // create a rappture library from the file filePath … … 55 56 Emax = Ef->value("eV") + 10*kT; 56 57 57 dE = 0.005*(Emax-Emin);58 dE = (1.0/nPts)*(Emax-Emin); 58 59 59 Rappture::SimpleDoubleBuffer fBuf; 60 Rappture::SimpleDoubleBuffer EBuf; 61 62 for (E = Emin; E < Emax; E = E + dE) { 60 E = Emin; 61 for (size_t idx = 0; idx < nPts; idx++) { 62 E = E + dE; 63 63 f = 1.0/(1.0 + exp((E - Ef)/kT)); 64 f Buf.append(f);65 E Buf.append(E);64 fArr[idx] = f; 65 EArr[idx] = E; 66 66 rpUtilsProgress((int)((E-Emin)/(Emax-Emin)*100),"Iterating"); 67 67 } 68 const double *fArr = fBuf.data();69 const double *EArr = EBuf.data();70 size_t nPts = fBuf.nmemb();71 68 72 69 const char *curveLabel = "Fermi-Dirac Curve" … … 75 72 // do it the easy way, 76 73 // create a plot to add to the library 74 // plot is registered with lib upon object creation 77 75 // p1->add(nPts,xArr,yArr,format,curveLabel,curveDesc); 78 76 79 Rappture::Plot *p1 = new Rappture::Plot( );77 Rappture::Plot *p1 = new Rappture::Plot(lib); 80 78 p1->add(nPts,fArr,EArr,"",curveLabel,curveDesc); 81 79 p1.propstr("xlabel","Fermi-Dirac Factor"); … … 83 81 p1.propstr("yunits","eV"); 84 82 85 // add the plot to the library86 lib.put(p1);87 88 89 // or do it the harder way,90 // create a curve to add to the library91 // c1->axis("xaxis","xlabel","xdesc","units","scale",dataArr,nPts);92 93 Rappture::Curve *c1 = new Rappture::Curve("output.curve(FDF)");94 c1->label(curveLabel);95 c1->desc(curveDesc);96 c1->axis("xaxis","Fermi-Dirac Factor","","","",fArr,nPts);97 c1->axis("yaxis","Energy","","eV","",EArr,nPts);98 99 // add the curve to the library100 lib.put(c1);101 102 83 lib.result(); 103 84 104 85 // clean up memory 105 86 delete lib; 87 delete T; 88 delete Ef; 106 89 delete p1; 107 delete c1;108 90 109 91 return 0; -
trunk/examples/objects/curve/curve.cc
r1528 r1560 1 1 #include <iostream> 2 2 #include "RpCurve.h" 3 4 size_t indent = 0; 5 size_t tabstop = 4; 3 6 4 7 int test( … … 34 37 } 35 38 36 std::cout << "xml: " << n->xml( ) << std::endl;39 std::cout << "xml: " << n->xml(indent,tabstop) << std::endl; 37 40 return 0; 38 41 } -
trunk/examples/objects/histogram/histogram.cc
r1528 r1560 36 36 h3->yaxis("ylabel3","ydesc3","yunits3"); 37 37 38 size_t indent = 0; 39 size_t tabstop = 4; 38 40 39 std::printf("xml: %s\n",h1->xml( ));40 std::printf("xml: %s\n",h2->xml( ));41 std::printf("xml: %s\n",h3->xml( ));41 std::printf("xml: %s\n",h1->xml(indent,tabstop)); 42 std::printf("xml: %s\n",h2->xml(indent,tabstop)); 43 std::printf("xml: %s\n",h3->xml(indent,tabstop)); 42 44 43 45 return 0; -
trunk/examples/objects/number/Makefile.in
r1386 r1560 34 34 FILES = \ 35 35 $(srcdir)/number.cc \ 36 $(srcdir)/number_1_0_in.xml \ 36 37 Makefile 37 38 -
trunk/examples/objects/number/number.cc
r1528 r1560 1 1 #include <iostream> 2 #include <errno.h> 3 #include <fstream> 4 #include <sys/stat.h> 2 5 #include "RpNumber.h" 6 7 size_t indent = 0; 8 size_t tabstop = 4; 3 9 4 10 int 5 11 printNumber(Rappture::Number *n) 6 12 { 13 std::cout << "name: " << n->name() << std::endl; 7 14 std::cout << "path: " << n->path() << std::endl; 8 15 std::cout << "label: " << n->label() << std::endl; … … 13 20 std::cout << "max: " << n->max() << std::endl; 14 21 std::cout << "units: " << n->units() << std::endl; 15 std::cout << "xml: " << n->xml() << std::endl; 16 return 0; 22 std::cout << "xml:\n" << n->xml(indent,tabstop) << std::endl; 23 return 0; 24 } 25 26 int testStringVal( 27 const char *testname, 28 const char *desc, 29 const char *expected, 30 const char *received) 31 { 32 if ((!expected && received) || 33 (expected && !received) || 34 (expected && received && strcmp(expected,received) != 0)) { 35 printf("Error: %s\n", testname); 36 printf("\t%s\n", desc); 37 printf("\texpected \"%s\"\n",expected); 38 printf("\treceived \"%s\"\n",received); 39 return 1; 40 } 41 return 0; 42 } 43 44 int testDoubleVal( 45 const char *testname, 46 const char *desc, 47 double expected, 48 double received) 49 { 50 if (expected != received) { 51 printf("Error: %s\n", testname); 52 printf("\t%s\n", desc); 53 printf("\texpected \"%g\"\n",expected); 54 printf("\treceived \"%g\"\n",received); 55 return 1; 56 } 57 return 0; 58 } 59 60 size_t 61 readFile ( 62 const char *filePath, 63 const char **buf) 64 { 65 if (buf == NULL) { 66 fprintf(stderr,"buf is NULL while opening file \"%s\"", filePath); 67 return 0; 68 } 69 70 FILE *f; 71 f = fopen(filePath, "rb"); 72 if (f == NULL) { 73 fprintf(stderr,"can't open \"%s\": %s", filePath, strerror(errno)); 74 return 0; 75 } 76 struct stat stat; 77 if (fstat(fileno(f), &stat) < 0) { 78 fprintf(stderr,"can't stat \"%s\": %s", filePath, strerror(errno)); 79 return 0; 80 } 81 off_t size; 82 size = stat.st_size; 83 char* memblock; 84 memblock = new char [size+1]; 85 if (memblock == NULL) { 86 fprintf(stderr,"can't allocate %zu bytes for file \"%s\": %s", 87 size, filePath, strerror(errno)); 88 fclose(f); 89 return 0; 90 } 91 92 size_t nRead; 93 nRead = fread(memblock, sizeof(char), size, f); 94 fclose(f); 95 96 if (nRead != (size_t)size) { 97 fprintf(stderr,"can't read %zu bytes from \"%s\": %s", size, filePath, 98 strerror(errno)); 99 return 0; 100 } 101 102 memblock[size] = '\0'; 103 *buf = memblock; 104 return nRead; 105 } 106 int number_0_0 () 107 { 108 const char *testdesc = "test number full constructor"; 109 const char *testname = "number_0_0"; 110 int retVal = 0; 111 112 const char *name = "temp"; 113 const char *units = "K"; 114 double def = 300; 115 double min = 0; 116 double max = 1000; 117 const char *label = "mylabel"; 118 const char *desc = "mydesc"; 119 120 Rappture::Number *n = NULL; 121 122 n = new Rappture::Number(name,units,def,min,max,label,desc); 123 124 if (n == NULL) { 125 printf("Error: %s\n", testname); 126 printf("\t%s\n", testdesc); 127 printf("\terror creating number object\n"); 128 retVal = 1; 129 } 130 131 retVal |= testStringVal(testname,testdesc,name,n->name()); 132 retVal |= testStringVal(testname,testdesc,units,n->units()); 133 retVal |= testDoubleVal(testname,testdesc,def,n->def()); 134 retVal |= testDoubleVal(testname,testdesc,min,n->min()); 135 retVal |= testDoubleVal(testname,testdesc,max,n->max()); 136 retVal |= testStringVal(testname,testdesc,label,n->label()); 137 retVal |= testStringVal(testname,testdesc,desc,n->desc()); 138 139 if (n != NULL) { 140 delete n; 141 } 142 143 return retVal; 144 } 145 146 int number_0_1 () 147 { 148 const char *testdesc = "test number constuctor"; 149 const char *testname = "number_0_0"; 150 int retVal = 0; 151 152 const char *name = "eV"; 153 const char *units = "eV"; 154 double def = 1.4; 155 156 Rappture::Number *n = NULL; 157 158 n = new Rappture::Number(name,units,def); 159 160 if (n == NULL) { 161 printf("Error: %s\n", testname); 162 printf("\t%s\n", testdesc); 163 printf("\terror creating number object\n"); 164 retVal = 1; 165 } 166 167 retVal |= testStringVal(testname,testdesc,name,n->name()); 168 retVal |= testStringVal(testname,testdesc,units,n->units()); 169 retVal |= testDoubleVal(testname,testdesc,def,n->def()); 170 171 if (n != NULL) { 172 delete n; 173 } 174 175 return retVal; 176 } 177 178 int number_1_0 () 179 { 180 const char *testdesc = "test constructing number from xml"; 181 const char *testname = "number_1_0"; 182 const char *filePath = "number_1_0_in.xml"; 183 int retVal = 0; 184 185 const char *buf = NULL; 186 readFile(filePath,&buf); 187 188 const char *name = "Ef"; 189 const char *units = "eV"; 190 double def = 0; 191 double cur = 5; 192 double min = -10; 193 double max = 10; 194 const char *label = "Fermi Level"; 195 const char *desc = "Energy at center of distribution."; 196 197 Rappture::Number n; 198 199 n.xml(buf); 200 201 retVal |= testStringVal(testname,testdesc,name,n.name()); 202 retVal |= testStringVal(testname,testdesc,units,n.units()); 203 retVal |= testDoubleVal(testname,testdesc,def,n.def()); 204 retVal |= testDoubleVal(testname,testdesc,cur,n.cur()); 205 retVal |= testDoubleVal(testname,testdesc,min,n.min()); 206 retVal |= testDoubleVal(testname,testdesc,max,n.max()); 207 retVal |= testStringVal(testname,testdesc,label,n.label()); 208 retVal |= testStringVal(testname,testdesc,desc,n.desc()); 209 210 return retVal; 17 211 } 18 212 19 213 int main() 20 214 { 21 Rappture::Number *n = NULL; 22 23 n = new Rappture::Number("input.number(temperature)","K",300, 24 0,1000,"mylabel","mydesc"); 25 26 printNumber(n); 27 28 Rappture::Number n1("input.number(eV)","eV",1.4); 29 printNumber(&n1); 30 31 delete n; 32 33 return 0; 34 } 215 number_0_0(); 216 number_0_1(); 217 number_1_0(); 218 219 return 0; 220 } -
trunk/examples/objects/path/path.cc
r1528 r1560 8 8 const char *received) 9 9 { 10 if (strcmp(expected,received) != 0) { 10 if ((!expected && received) || 11 (expected && !received) || 12 (expected && received && strcmp(expected,received) != 0)) { 11 13 printf("Error: %s\n", testname); 12 14 printf("\t%s\n", desc); … … 114 116 115 117 const char *path = "input.group(tabs).number(mynum).current"; 116 const char *expected = "";118 const char *expected = NULL; 117 119 const char *received = NULL; 118 120 … … 773 775 // FIXME: add test for parent get/set functions 774 776 // FIXME: add test for path get/set functions 777 // FIXME: add test for changing the curr location 778 // using first,last,next,prev and checking 779 // comp, type, parent,id fxns 780 // FIXME: add test for numbered paths 781 // input.number2 782 // input.number2(eee) 783 // input.number(eee)2 775 784 776 785 int main() -
trunk/examples/objects/plot/plot.cc
r1528 r1560 41 41 std::printf("curveCnt = %zu\n",curveCnt); 42 42 43 std::printf("xml: %s\n",p1->xml()); 43 size_t indent = 0; 44 size_t tabstop = 4; 45 46 std::printf("xml: %s\n",p1->xml(indent,tabstop)); 44 47 45 48 /* -
trunk/examples/objects/scatter/scatter.cc
r1528 r1560 41 41 std::printf("curveCnt = %zu\n",curveCnt); 42 42 43 std::printf("xml: %s\n",p1->xml()); 43 size_t indent = 0; 44 size_t tabstop = 4; 45 std::printf("xml: %s\n",p1->xml(indent,tabstop)); 44 46 45 47 /* -
trunk/examples/objects/tree/tree.c
r1528 r1560 14 14 Rp_Tree t; 15 15 16 Rp_TreeCreate(treeName, t);16 Rp_TreeCreate(treeName,&t); 17 17 received = Rp_TreeName(t); 18 18 … … 28 28 } 29 29 30 int tree_1_0 () 31 { 32 const char *desc = "test creation of tree node"; 33 const char *testname = "tree_1_0"; 34 35 const char *treeName = "mytree"; 36 const char *nodeName = "mynode"; 37 const char *expected = "mynode"; 38 const char *received = NULL; 39 40 Rp_Tree t; 41 Rp_TreeNode n = NULL; 42 43 Rp_TreeCreate(treeName,&t); 44 n = Rp_TreeCreateNode(t, Rp_TreeRootNode(t), nodeName, 0); 45 received = Rp_TreeNodeLabel(n); 46 47 if (strcmp(expected,received) != 0) { 48 printf("Error: %s\n", testname); 49 printf("\t%s\n", desc); 50 printf("\texpected \"%s\"\n",expected); 51 printf("\treceived \"%s\"\n",received); 52 return 1; 53 } 54 55 return 0; 56 } 57 58 int tree_2_0 () 59 { 60 const char *desc = "test creation of tree node with single child"; 61 const char *testname = "tree_2_0"; 62 63 const char *treeName = "mytree"; 64 const char *parentNodeName = "myparentnode"; 65 const char *childNodeName = "mychildnode"; 66 const char *expected = "mychildnode"; 67 const char *received = NULL; 68 69 Rp_Tree t; 70 Rp_TreeNode parent = NULL; 71 Rp_TreeNode child = NULL; 72 73 Rp_TreeCreate(treeName,&t); 74 parent = Rp_TreeCreateNode(t, Rp_TreeRootNode(t), parentNodeName, 0); 75 child = Rp_TreeCreateNode(t, parent, childNodeName, 0); 76 received = Rp_TreeNodeLabel(child); 77 78 if (strcmp(expected,received) != 0) { 79 printf("Error: %s\n", testname); 80 printf("\t%s\n", desc); 81 printf("\texpected \"%s\"\n",expected); 82 printf("\treceived \"%s\"\n",received); 83 return 1; 84 } 85 86 return 0; 87 } 88 89 int tree_2_1 () 90 { 91 const char *desc = "test creation of tree node with multiple children"; 92 const char *testname = "tree_2_1"; 93 94 const char *treeName = "mytree"; 95 const char *parentNodeName = "myparentnode"; 96 size_t expected = 5; 97 size_t received = 0; 98 99 Rp_Tree t; 100 Rp_TreeNode parent = NULL; 101 102 Rp_TreeCreate(treeName,&t); 103 parent = Rp_TreeCreateNode(t, Rp_TreeRootNode(t), parentNodeName, 0); 104 105 Rp_TreeCreateNode(t, parent, "child1", 0); 106 Rp_TreeCreateNode(t, parent, "child2", 0); 107 Rp_TreeCreateNode(t, parent, "child3", 0); 108 Rp_TreeCreateNode(t, parent, "child4", 0); 109 Rp_TreeCreateNode(t, parent, "child5", 0); 110 111 received = Rp_TreeNodeDegree(parent); 112 113 if (expected != received) { 114 printf("Error: %s\n", testname); 115 printf("\t%s\n", desc); 116 printf("\texpected \"%zu\"\n",expected); 117 printf("\treceived \"%zu\"\n",received); 118 return 1; 119 } 120 121 return 0; 122 } 123 124 int tree_2_2 () 125 { 126 const char *desc = "test search for child node"; 127 const char *testname = "tree_2_2"; 128 129 const char *treeName = "mytree"; 130 const char *parentNodeName = "myparentnode"; 131 const char *childNodeName = "mychildnode"; 132 const char *expected = "mychildnode"; 133 const char *received = NULL; 134 135 Rp_Tree t; 136 Rp_TreeNode parent = NULL; 137 Rp_TreeNode foundChild = NULL; 138 139 Rp_TreeCreate(treeName,&t); 140 parent = Rp_TreeCreateNode(t, Rp_TreeRootNode(t), parentNodeName, 0); 141 142 Rp_TreeCreateNode(t, parent, "child1", 0); 143 Rp_TreeCreateNode(t, parent, "child2", 0); 144 Rp_TreeCreateNode(t, parent, "child3", 0); 145 Rp_TreeCreateNode(t, parent, childNodeName, 0); 146 Rp_TreeCreateNode(t, parent, "child4", 0); 147 Rp_TreeCreateNode(t, parent, "child5", 0); 148 149 foundChild = Rp_TreeFindChild(parent,childNodeName); 150 received = Rp_TreeNodeLabel(foundChild); 151 152 if (strcmp(expected,received) != 0) { 153 printf("Error: %s\n", testname); 154 printf("\t%s\n", desc); 155 printf("\texpected \"%s\"\n",expected); 156 printf("\treceived \"%s\"\n",received); 157 return 1; 158 } 159 160 return 0; 161 } 162 163 int tree_3_0 () 164 { 165 const char *desc = "test adding node with string value"; 166 const char *testname = "tree_3_0"; 167 168 const char *treeName = "mytree"; 169 const char *parentNodeName = "myparentnode"; 170 const char *childNodeName = "mychildnode"; 171 const char *childNodeValue = "quick brown fox"; 172 const char *expected = "quick brown fox1"; 173 const char *received = NULL; 174 175 Rp_Tree t; 176 Rp_TreeNode parent = NULL; 177 Rp_TreeNode child = NULL; 178 179 Rp_TreeCreate(treeName,&t); 180 parent = Rp_TreeCreateNode(t, Rp_TreeRootNode(t), parentNodeName, 0); 181 182 child = Rp_TreeCreateNode(t, parent, childNodeName, 0); 183 Rp_TreeSetValue(t,child,"value",(void *)childNodeValue); 184 185 Rp_TreeGetValue(t,child,"value",(void **)&received); 186 187 if (strcmp(expected,received) != 0) { 188 printf("Error: %s\n", testname); 189 printf("\t%s\n", desc); 190 printf("\texpected \"%s\"\n",expected); 191 printf("\treceived \"%s\"\n",received); 192 return 1; 193 } 194 195 return 0; 196 } 197 30 198 int main() 31 199 { 32 200 tree_0_0(); 33 34 return 0; 35 } 201 tree_1_0(); 202 tree_2_0(); 203 tree_2_1(); 204 tree_2_2(); 205 tree_3_0(); 206 207 // add test case where two children have the same name but different ids 208 209 return 0; 210 } -
trunk/examples/objects/xmlparser/Makefile.in
r1528 r1560 34 34 FILES = \ 35 35 $(srcdir)/xmlparser.cc \ 36 $(srcdir)/xmlparser_1_0_in.xml \ 37 $(srcdir)/xmlparser_1_0_out.xml \ 38 $(srcdir)/xmlparser_2_0_in.xml \ 36 39 $(srcdir)/tool.xml \ 37 40 Makefile -
trunk/examples/objects/xmlparser/xmlparser.cc
r1528 r1560 1 #include <stdio.h> 2 #include <expat.h> 3 #include <string.h> 4 #include "RpInt.h" 5 #include "RpChain.h" 6 #include "RpPath.h" 7 #include "RpNumber.h" 8 9 #define BUFFSIZE 8192 10 11 char Buff[BUFFSIZE]; 12 13 typedef struct { 14 int skip; 15 int depth; 16 Rappture::Path *path; 17 Rp_Chain *c; 18 void *lastObj; 19 int lastObjType; 20 Rappture::Object *v; 21 } Parseinfo; 22 23 void 24 init_info(Parseinfo *info) { 25 info->skip = 0; 26 info->depth = 1; 27 info->path = new Rappture::Path(); 28 info->c = Rp_ChainCreate(); 29 info->lastObj = NULL; 30 info->lastObjType = 0; 31 info->v = NULL; 32 } 33 34 int 35 should_skip(Parseinfo *inf, const char *el, const char **attr) { 36 int skip = 0; 37 38 if ( (*el == 's') && (strcmp("string",el) == 0) ) { 39 skip = 1; 40 } 41 42 return skip; 43 } 44 45 static void XMLCALL 46 start(void *data, const char *el, const char **attr) 47 { 48 Parseinfo *inf = (Parseinfo *) data; 49 50 if ( (*el == 'i') && (strcmp("input",el) == 0) ) { 51 inf->path->add(el); 52 } else if ( (*el == 'n') && (strcmp("number",el) == 0) ) { 53 inf->path->add(el); 54 // null units kills number 55 // Rappture::Number *n = new Rappture::Number(inf->path->path(NULL),NULL,0.0); 56 Rappture::Number *n = new Rappture::Number(inf->path->path(),"",0.0); 57 Rp_ChainAppend(inf->c,n); 58 inf->v = n; 59 } else { 60 // add the tags to the hash table of the last object we created. 61 // this means new objects must be declared here, 62 // or they will become part of the last recognized object 63 // this could lead to major problems. 64 // we have no way to ignore stuff we don't recognize 65 66 inf->path->add(el); 67 if (inf->v) { 68 // inf->v->property(el,); 69 } 70 } 71 72 inf->depth++; 73 } 74 75 static void XMLCALL 76 end(void *data, const char *el) 77 { 78 Parseinfo *inf = (Parseinfo *) data; 79 inf->path->del(); 80 inf->depth--; 81 // pop object off the end of the inf->c chain 82 // add object to the tree object 83 } 84 85 void 86 rawstart(void *data, const char *el, const char **attr) { 87 Parseinfo *inf = (Parseinfo *) data; 88 89 if (! inf->skip) { 90 if (should_skip(inf, el, attr)) { 91 inf->skip = inf->depth; 92 } 93 else { 94 start(inf, el, attr); /* This does rest of start handling */ 95 } 96 } 97 98 inf->depth++; 99 } /* End of rawstart */ 100 101 void 102 rawend(void *data, const char *el) { 103 Parseinfo *inf = (Parseinfo *) data; 104 105 inf->depth--; 106 107 if (! inf->skip) { 108 end(inf, el); /* This does rest of end handling */ 109 } 110 111 if (inf->skip == inf->depth) { 112 inf->skip = 0; 113 } 114 } /* End rawend */ 115 116 /* 117 void 118 char_handler(void* data, XML_Char const* s, int len) 119 { 120 int total = 0; 121 int total_old = 0; 122 scew_element* current = NULL; 123 Parseinfo *inf = (Parseinfo *) data; 124 125 if (inf == NULL) { 126 return; 127 } 128 129 if (inf->v == NULL) 130 { 131 return; 132 } 133 134 if (current->contents != NULL) 135 { 136 total_old = scew_strlen(current->contents); 137 } 138 total = (total_old + len + 1) * sizeof(XML_Char); 139 current->contents = (XML_Char*) realloc(current->contents, total); 140 141 if (total_old == 0) 142 { 143 current->contents[0] = '\0'; 144 } 145 146 scew_strncat(current->contents, s, len); 147 } 148 */ 149 150 151 int 152 main(int argc, char *argv[]) 153 { 154 Parseinfo info; 155 XML_Parser p = XML_ParserCreate(NULL); 156 if (! p) { 157 fprintf(stderr, "Couldn't allocate memory for parser\n"); 158 exit(-1); 159 } 160 161 init_info(&info); 162 XML_SetUserData(p,&info); 163 164 XML_SetElementHandler(p, rawstart, rawend); 165 //XML_SetDefaultHandler(p, char_handler); 166 167 for (;;) { 168 int done; 169 int len; 170 171 len = fread(Buff, 1, BUFFSIZE, stdin); 172 if (ferror(stdin)) { 173 fprintf(stderr, "Read error\n"); 174 exit(-1); 175 } 176 done = feof(stdin); 177 178 if (XML_Parse(p, Buff, len, done) == XML_STATUS_ERROR) { 179 fprintf(stderr, "Parse error at line %lu:\n%s\n", 180 XML_GetCurrentLineNumber(p), 181 XML_ErrorString(XML_GetErrorCode(p))); 182 exit(-1); 183 } 184 185 if (done) { 186 break; 187 } 188 } 189 190 Rp_ChainLink *lv = NULL; 191 Rappture::Number *n = NULL; 192 lv = Rp_ChainFirstLink(info.c); 193 while (lv) { 194 n = (Rappture::Number *) Rp_ChainGetValue(lv); 195 printf("%s\n",n->xml()); 196 lv = Rp_ChainNextLink(lv); 197 } 1 #include <iostream> 2 #include <errno.h> 3 #include <fstream> 4 #include <sys/stat.h> 5 #include "RpParserXML.h" 6 7 size_t 8 readFile ( 9 const char *filePath, 10 const char **buf) 11 { 12 if (buf == NULL) { 13 fprintf(stderr,"buf is NULL while opening file \"%s\"", filePath); 14 return 0; 15 } 16 17 FILE *f; 18 f = fopen(filePath, "rb"); 19 if (f == NULL) { 20 fprintf(stderr,"can't open \"%s\": %s", filePath, strerror(errno)); 21 return 0; 22 } 23 struct stat stat; 24 if (fstat(fileno(f), &stat) < 0) { 25 fprintf(stderr,"can't stat \"%s\": %s", filePath, strerror(errno)); 26 return 0; 27 } 28 off_t size; 29 size = stat.st_size; 30 char* memblock; 31 memblock = new char [size+1]; 32 if (memblock == NULL) { 33 fprintf(stderr,"can't allocate %zu bytes for file \"%s\": %s", 34 size, filePath, strerror(errno)); 35 fclose(f); 36 return 0; 37 } 38 39 size_t nRead; 40 nRead = fread(memblock, sizeof(char), size, f); 41 fclose(f); 42 43 if (nRead != (size_t)size) { 44 fprintf(stderr,"can't read %zu bytes from \"%s\": %s", size, filePath, 45 strerror(errno)); 46 return 0; 47 } 48 49 memblock[size] = '\0'; 50 *buf = memblock; 51 return nRead; 52 } 53 54 int xmlparser_0_0 () 55 { 56 const char *desc = "test creating xml parser"; 57 const char *testname = "xmlparser_0_0"; 58 int retVal = 0; 59 60 const char *expected = "initialized ParserXml Object"; 61 const char *received = NULL; 62 63 Rp_ParserXml *p = NULL; 64 65 p = Rp_ParserXmlCreate(); 66 67 if (p == NULL) { 68 printf("Error: %s\n", testname); 69 printf("\t%s\n", desc); 70 printf("\texpected \"%s\"\n",expected); 71 printf("\treceived \"%s\"\n",received); 72 retVal = 1; 73 } 74 75 if (p) { 76 Rp_ParserXmlDestroy(&p); 77 } 78 79 return retVal; 80 } 81 82 int xmlparser_1_0 () 83 { 84 const char *desc = "test sending xml text to xml parser"; 85 const char *testname = "xmlparser_1_0"; 86 const char *infile = "xmlparser_1_0_in.xml"; 87 const char *outfile = "xmlparser_1_0_out.xml"; 88 int retVal = 0; 89 90 const char *xmltext = NULL; 91 const char *expected = NULL; 92 93 readFile(infile,&xmltext); 94 readFile(outfile,&expected); 95 96 const char *received = NULL; 97 98 Rp_ParserXml *p = NULL; 99 100 p = Rp_ParserXmlCreate(); 101 102 Rp_ParserXmlParse(p, xmltext); 103 104 received = Rp_ParserXmlXml(p); 105 106 107 if (strcmp(expected,received) != 0) { 108 printf("Error: %s\n", testname); 109 printf("\t%s\n", desc); 110 printf("\texpected %zu bytes: \"%s\"\n",strlen(expected), expected); 111 printf("\treceived %zu bytes: \"%s\"\n",strlen(received), received); 112 retVal = 1; 113 } 114 115 if (p) { 116 Rp_ParserXmlDestroy(&p); 117 } 118 119 return retVal; 120 } 121 122 123 int xmlparser_2_0 () 124 { 125 const char *desc = "test printing xml as path/val combos"; 126 const char *testname = "xmlparser_2_0"; 127 const char *infile = "xmlparser_2_0_in.xml"; 128 int retVal = 0; 129 130 const char *xmltext = NULL; 131 132 readFile(infile,&xmltext); 133 134 const char *expected = "\ 135 run.tool.about Press Simulate to view results.\n\ 136 run.tool.command tclsh @tool/fermi.tcl @driver\n\ 137 run.input.number(Ef).about.label Fermi Level\n\ 138 run.input.number(Ef).about.description Energy at center of distribution.\n\ 139 run.input.number(Ef).units eV\n\ 140 run.input.number(Ef).min -10eV\n\ 141 run.input.number(Ef).max 10eV\n\ 142 run.input.number(Ef).default 0eV\n\ 143 run.input.number(Ef).current 0eV\n"; 144 145 const char *received = NULL; 146 147 Rp_ParserXml *p = NULL; 148 149 p = Rp_ParserXmlCreate(); 150 151 Rp_ParserXmlParse(p, xmltext); 152 153 received = Rp_ParserXmlPathVal(p); 154 155 156 if (strcmp(expected,received) != 0) { 157 printf("Error: %s\n", testname); 158 printf("\t%s\n", desc); 159 printf("\texpected %zu bytes: \"%s\"\n",strlen(expected), expected); 160 printf("\treceived %zu bytes: \"%s\"\n",strlen(received), received); 161 retVal = 1; 162 } 163 164 if (p) { 165 Rp_ParserXmlDestroy(&p); 166 } 167 168 return retVal; 169 } 170 171 int xmlparser_3_0 () 172 { 173 const char *desc = "test getting xml value"; 174 const char *testname = "xmlparser_3_0"; 175 const char *infile = "xmlparser_2_0_in.xml"; 176 int retVal = 0; 177 178 const char *xmltext = NULL; 179 180 readFile(infile,&xmltext); 181 182 const char *expected = "0eV"; 183 184 const char *received = NULL; 185 186 Rp_ParserXml *p = NULL; 187 188 p = Rp_ParserXmlCreate(); 189 190 Rp_ParserXmlParse(p, xmltext); 191 192 received = Rp_ParserXmlGet(p,"input.number(Ef).current"); 193 194 195 if (strcmp(expected,received) != 0) { 196 printf("Error: %s\n", testname); 197 printf("\t%s\n", desc); 198 printf("\texpected %zu bytes: \"%s\"\n",strlen(expected), expected); 199 printf("\treceived %zu bytes: \"%s\"\n",strlen(received), received); 200 retVal = 1; 201 } 202 203 if (p) { 204 Rp_ParserXmlDestroy(&p); 205 } 206 207 return retVal; 208 } 209 210 int xmlparser_4_0 () 211 { 212 const char *desc = "test putting xml value"; 213 const char *testname = "xmlparser_4_0"; 214 const char *infile = "xmlparser_2_0_in.xml"; 215 int retVal = 0; 216 217 const char *xmltext = NULL; 218 219 readFile(infile,&xmltext); 220 221 const char *expected = "hi mom"; 222 223 const char *received = NULL; 224 225 Rp_ParserXml *p = NULL; 226 227 p = Rp_ParserXmlCreate(); 228 229 Rp_ParserXmlParse(p, xmltext); 230 231 Rp_ParserXmlPut(p,"input.number(gg).current","hi mom",0); 232 received = Rp_ParserXmlGet(p,"input.number(gg).current"); 233 234 if (strcmp(expected,received) != 0) { 235 printf("Error: %s\n", testname); 236 printf("\t%s\n", desc); 237 printf("\texpected %zu bytes: \"%s\"\n",strlen(expected), expected); 238 printf("\treceived %zu bytes: \"%s\"\n",strlen(received), received); 239 retVal = 1; 240 } 241 242 if (p) { 243 Rp_ParserXmlDestroy(&p); 244 } 245 246 return retVal; 247 } 248 249 int xmlparser_5_0 () 250 { 251 const char *desc = "test printing xml with degrees of presets"; 252 const char *testname = "xmlparser_5_0"; 253 const char *infile = "xmlparser_5_0_in.xml"; 254 int retVal = 0; 255 256 const char *xmltext = NULL; 257 258 readFile(infile,&xmltext); 259 260 const char *expected = "\ 261 run.tool.about Press Simulate to view results.\n\ 262 run.tool.command tclsh @tool/fermi.tcl @driver\n\ 263 run.input.number(Ef).about.label Fermi Level\n\ 264 run.input.number(Ef).about.description Energy at center of distribution.\n\ 265 run.input.number(Ef).units eV\n\ 266 run.input.number(Ef).min -10eV\n\ 267 run.input.number(Ef).max 10eV\n\ 268 run.input.number(Ef).default 0eV\n\ 269 run.input.number(Ef).current 0eV\n"; 270 271 const char *received = NULL; 272 273 Rp_ParserXml *p = NULL; 274 275 p = Rp_ParserXmlCreate(); 276 277 Rp_ParserXmlParse(p, xmltext); 278 279 received = Rp_ParserXmlPathVal(p); 280 281 282 if (strcmp(expected,received) != 0) { 283 printf("Error: %s\n", testname); 284 printf("\t%s\n", desc); 285 printf("\texpected %zu bytes: \"%s\"\n",strlen(expected), expected); 286 printf("\treceived %zu bytes: \"%s\"\n",strlen(received), received); 287 retVal = 1; 288 } 289 290 if (p) { 291 Rp_ParserXmlDestroy(&p); 292 } 293 294 return retVal; 295 } 296 297 // FIXME: test what happens when parser sees self closing tag <tag/> 298 // FIXME: test get function 299 // FIXME: test put function 300 // FIXME: look into why Rp_ParserXmlPathVal hits some nodes twice in gdb 301 302 int main() 303 { 304 xmlparser_0_0(); 305 xmlparser_1_0(); 306 xmlparser_2_0(); 307 xmlparser_3_0(); 308 xmlparser_4_0(); 309 xmlparser_5_0(); 198 310 199 311 return 0;
Note: See TracChangeset
for help on using the changeset viewer.