Changeset 1569


Ignore:
Timestamp:
Sep 16, 2009 2:22:36 PM (11 years ago)
Author:
dkearney
Message:

adding configure/dump functions to plot object, creating simple test case for dumping xml
all objects should have "run" as their parent path if no parent path is provided.

Location:
trunk
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/examples/objects/curve/curve.cc

    r1568 r1569  
    4141
    4242    const char *expected = "<?xml version=\"1.0\"?>\n\
    43 <curve id=\"myid\">\n\
    44     <about>\n\
    45         <group>mygroup</group>\n\
    46         <label>mylabel</label>\n\
    47         <description>mydesc</description>\n\
    48         <type>(null)</type>\n\
    49     </about>\n\
    50     <xaxis>\n\
    51         <label>xlabel</label>\n\
    52         <description>xdesc</description>\n\
    53         <units>xunits</units>\n\
    54         <scale>xscale</scale>\n\
    55     </xaxis>\n\
    56     <yaxis>\n\
    57         <label>ylabel</label>\n\
    58         <description>ydesc</description>\n\
    59         <units>yunits</units>\n\
    60         <scale>yscale</scale>\n\
    61     </yaxis>\n\
    62     <component>\n\
    63         <xy>         1         1\n\
     43<run>\n\
     44    <curve id=\"myid\">\n\
     45        <about>\n\
     46            <group>mygroup</group>\n\
     47            <label>mylabel</label>\n\
     48            <description>mydesc</description>\n\
     49            <type>(null)</type>\n\
     50        </about>\n\
     51        <xaxis>\n\
     52            <label>xlabel</label>\n\
     53            <description>xdesc</description>\n\
     54            <units>xunits</units>\n\
     55            <scale>xscale</scale>\n\
     56        </xaxis>\n\
     57        <yaxis>\n\
     58            <label>ylabel</label>\n\
     59            <description>ydesc</description>\n\
     60            <units>yunits</units>\n\
     61            <scale>yscale</scale>\n\
     62        </yaxis>\n\
     63        <component>\n\
     64            <xy>         1         1\n\
    6465         2         4\n\
    6566         3         9\n\
     
    7273        10       100\n\
    7374</xy>\n\
    74     </component>\n\
    75 </curve>\n\
     75        </component>\n\
     76    </curve>\n\
     77</run>\n\
    7678";
    7779    const char *received = NULL;
  • trunk/examples/objects/plot/plot.cc

    r1560 r1569  
    22#include "RpPlot.h"
    33
     4size_t indent = 0;
     5size_t tabstop = 4;
     6
     7int test(
     8    const char *testname,
     9    const char *desc,
     10    const char *expected,
     11    const char *received)
     12{
     13    if (strcmp(expected,received) != 0) {
     14        printf("Error: %s\n", testname);
     15        printf("\t%s\n", desc);
     16        printf("\texpected \"%s\"\n",expected);
     17        printf("\treceived \"%s\"\n",received);
     18        return 1;
     19    }
     20    return 0;
     21}
     22
     23int plot_0_0 ()
     24{
     25    const char *desc = "test basic plot object constructor";
     26    const char *testname = "plot_0_0";
     27
     28    const char *expected = "run";
     29    const char *received = NULL;
     30
     31    Rappture::Plot p;
     32    received = p.path();
     33
     34    return test(testname,desc,expected,received);
     35}
     36
     37int plot_1_0 ()
     38{
     39    const char *desc = "test generating xml text for single curve";
     40    const char *testname = "plot_1_0";
     41
     42    const char *expected = "<?xml version=\"1.0\"?>\n\
     43<run>\n\
     44    <curve id=\"myid\">\n\
     45        <about>\n\
     46            <group>plotlabel</group>\n\
     47            <label>plotlabel</label>\n\
     48            <description>describe plot here</description>\n\
     49            <type>(null)</type>\n\
     50        </about>\n\
     51        <xaxis>\n\
     52            <label>Voltage</label>\n\
     53            <description>Voltage along the Gate</description>\n\
     54            <units>Volt</units>\n\
     55            <scale>linear</scale>\n\
     56        </xaxis>\n\
     57        <yaxis>\n\
     58            <label>Current</label>\n\
     59            <description>Current along the Drain</description>\n\
     60            <units>Amp</units>\n\
     61            <scale>log</scale>\n\
     62        </yaxis>\n\
     63        <component>\n\
     64            <xy>         1         1\n\
     65         2         4\n\
     66         3         9\n\
     67         4        16\n\
     68         5        25\n\
     69         6        36\n\
     70         7        49\n\
     71         8        64\n\
     72         9        81\n\
     73        10       100\n\
     74</xy>\n\
     75        </component>\n\
     76    </curve>\n\
     77</run>\n\
     78";
     79    const char *received = NULL;
     80
     81    Rappture::Plot p;
     82    size_t npts = 10;
     83    double x[] = {1,2,3,4,5,6,7,8,9,10};
     84    double y[] = {1,4,9,16,25,36,49,64,81,100};
     85
     86    p.add(npts, x, y, NULL, "myid");
     87
     88    p.propstr("label","plotlabel");
     89    p.propstr("desc","describe plot here");
     90    p.propstr("xlabel","Voltage");
     91    p.propstr("xdesc","Voltage along the Gate");
     92    p.propstr("xunits","Volt");
     93    p.propstr("xscale","linear");
     94    p.propstr("ylabel","Current");
     95    p.propstr("ydesc","Current along the Drain");
     96    p.propstr("yunits","Amp");
     97    p.propstr("yscale","log");
     98
     99    Rappture::ClientDataXml xmldata;
     100    xmldata.indent = indent;
     101    xmldata.tabstop = tabstop;
     102    xmldata.retStr = NULL;
     103    p.dump(Rappture::RPCONFIG_XML,&xmldata);
     104    received = xmldata.retStr;
     105
     106    return test(testname,desc,expected,received);
     107}
     108
     109int main()
     110{
     111    plot_0_0 ();
     112    plot_1_0 ();
     113    return 0;
     114}
     115
     116/*
    4117int main()
    5118{
     
    46159    std::printf("xml: %s\n",p1->xml(indent,tabstop));
    47160
    48 /*
    49     // retrieve curve from curve name
    50     // may want to add curve to another plot
    51     // or just read through the values
    52     Rappture::Curve *c = p1->curve("curve1");
    53 
    54     const double *ax = NULL;
    55     const double *ay = NULL;
    56     size_t xlen = 0;
    57     size_t ylen = 0;
    58 
    59     xlen = c->data(Rappture::Curve::xaxis,&ax);
    60     ylen = c->data(Rappture::Curve::yaxis,&ay);
    61 
    62     std::printf("xlen = %zu\nylen = %zu\n",xlen,ylen);
    63     std::printf("fmt = %s\n",c->propstr(Rappture::Curve::format,NULL));
    64 
    65     if (   (ax != NULL)
    66         && (ay != NULL)) {
    67         for (size_t i = 0; (i < xlen) && (i < ylen); i++) {
    68             std::printf("x = %g  y = %g\n",ax[i],ay[i]);
    69         }
    70     }
    71 */
    72 
    73161    delete p1;
    74162
    75163    return 0;
    76164}
     165*/
  • trunk/src/objects/RpCurve.cc

    r1568 r1569  
    2929{
    3030    this->name("");
    31     this->path("");
     31    this->path("run");
    3232    this->label("");
    3333    this->desc("");
     
    4040{
    4141    this->name(name);
    42     this->path("");
     42    this->path("run");
    4343    this->label("");
    4444    this->desc("");
     
    5252{
    5353    this->name(name);
    54     this->path("");
     54    this->path("run");
    5555    this->label(label);
    5656    this->desc(desc);
     
    312312    path(pathObj.parent());
    313313    name(Rp_ParserXmlNodeId(p,node));
    314     label(Rp_ParserXmlGet(p,"about.label"));
    315     desc(Rp_ParserXmlGet(p,"about.description"));
    316 
    317     Array1D *xaxis = axis("xaxis","","","","",NULL,0);
    318     xaxis->label(Rp_ParserXmlGet(p,"xaxis.label"));
    319     xaxis->desc(Rp_ParserXmlGet(p,"xaxis.description"));
    320     xaxis->units(Rp_ParserXmlGet(p,"xaxis.units"));
    321     xaxis->scale(Rp_ParserXmlGet(p,"xaxis.scale"));
    322 
    323     Array1D *yaxis = axis("yaxis","","","","",NULL,0);
    324     yaxis->label(Rp_ParserXmlGet(p,"yaxis.label"));
    325     yaxis->desc(Rp_ParserXmlGet(p,"yaxis.description"));
    326     yaxis->units(Rp_ParserXmlGet(p,"yaxis.units"));
    327     yaxis->scale(Rp_ParserXmlGet(p,"yaxis.scale"));
    328 
    329     const char *values = Rp_ParserXmlGet(p,"component.xy");
     314
     315    pathObj.clear();
     316    pathObj.add("about");
     317    pathObj.add("label");
     318    label(Rp_ParserXmlGet(p,pathObj.path()));
     319
     320    pathObj.del();
     321    pathObj.add("description");
     322    desc(Rp_ParserXmlGet(p,pathObj.path()));
     323
     324
     325    Array1D *xaxis = axis(Curve::x,"","","","",NULL,0);
     326    pathObj.del();
     327    pathObj.del();
     328    pathObj.add(Curve::x);
     329    pathObj.add("label");
     330    xaxis->label(Rp_ParserXmlGet(p,pathObj.path()));
     331    pathObj.del();
     332    pathObj.add("description");
     333    xaxis->desc(Rp_ParserXmlGet(p,pathObj.path()));
     334    pathObj.del();
     335    pathObj.add("units");
     336    xaxis->units(Rp_ParserXmlGet(p,pathObj.path()));
     337    pathObj.del();
     338    pathObj.add("scale");
     339    xaxis->scale(Rp_ParserXmlGet(p,pathObj.path()));
     340
     341    Array1D *yaxis = axis(Curve::y,"","","","",NULL,0);
     342    pathObj.del();
     343    pathObj.del();
     344    pathObj.add(Curve::y);
     345    pathObj.add("label");
     346    yaxis->label(Rp_ParserXmlGet(p,pathObj.path()));
     347    pathObj.del();
     348    pathObj.add("description");
     349    yaxis->desc(Rp_ParserXmlGet(p,pathObj.path()));
     350    pathObj.del();
     351    pathObj.add("units");
     352    yaxis->units(Rp_ParserXmlGet(p,pathObj.path()));
     353    pathObj.del();
     354    pathObj.add("scale");
     355    yaxis->scale(Rp_ParserXmlGet(p,pathObj.path()));
     356
     357    pathObj.del();
     358    pathObj.del();
     359    pathObj.add("component");
     360    pathObj.add("xy");
     361    const char *values = Rp_ParserXmlGet(p,pathObj.path());
    330362
    331363    double x,y;
     
    460492        tmpBuf.appendf("\n");
    461493    }
    462     p.add("component.xy");
     494    p.add("component");
     495    p.add("xy");
    463496    Rp_ParserXmlPutF(parser,p.path(),"%s",tmpBuf.bytes());
    464497
  • trunk/src/objects/RpNumber.cc

    r1568 r1569  
    2828    // FIXME: empty names should be autoname'd
    2929    this->name("");
    30     this->path("");
     30    this->path("run");
    3131    this->label("");
    3232    this->desc("");
     
    4848
    4949    this->name(name);
    50     this->path("");
     50    this->path("run");
    5151    this->label("");
    5252    this->desc("");
     
    7474
    7575    this->name(name);
    76     this->path("");
     76    this->path("run");
    7777    this->label(label);
    7878    this->desc(desc);
     
    301301
    302302/**********************************************************************/
    303 // METHOD: configure(Rp_ParserXml *p)
     303// METHOD: configure(ClientData c)
    304304/// construct a number object from the provided tree
    305305/**
     
    308308
    309309void
    310 Number::configure(size_t as, void *p)
     310Number::configure(size_t as, ClientData c)
    311311{
    312312    if (as == RPCONFIG_XML) {
    313         __configureFromXml((const char *)p);
     313        __configureFromXml(c);
    314314    } else if (as == RPCONFIG_TREE) {
    315         __configureFromTree((Rp_ParserXml *)p);
     315        __configureFromTree(c);
    316316    }
    317317}
     
    325325
    326326void
    327 Number::__configureFromXml(const char *xmltext)
    328 {
     327Number::__configureFromXml(ClientData c)
     328{
     329    const char *xmltext = (const char *)c;
    329330    if (xmltext == NULL) {
    330331        // FIXME: setup error
     
    340341
    341342void
    342 Number::__configureFromTree(Rp_ParserXml *p)
    343 {
     343Number::__configureFromTree(ClientData c)
     344{
     345    Rp_ParserXml *p = (Rp_ParserXml *)c;
    344346    if (p == NULL) {
    345347        // FIXME: setup error
     
    353355    path(pathObj.parent());
    354356    name(Rp_ParserXmlNodeId(p,node));
    355     label(Rp_ParserXmlGet(p,"about.label"));
    356     desc(Rp_ParserXmlGet(p,"about.description"));
     357
     358    pathObj.clear();
     359    pathObj.add("about");
     360    pathObj.add("label");
     361    label(Rp_ParserXmlGet(p,pathObj.path()));
     362    pathObj.type("description");
     363    desc(Rp_ParserXmlGet(p,pathObj.path()));
    357364    units(Rp_ParserXmlGet(p,"units"));
    358365    minFromStr(Rp_ParserXmlGet(p,"min"));
     
    418425    }
    419426
     427    ClientDataXml *d = (ClientDataXml *)c;
    420428    Rp_ParserXml *parser = Rp_ParserXmlCreate();
    421429    __dumpToTree(parser);
    422     const char *xmltext = Rp_ParserXmlXml(parser);
    423     _tmpBuf.appendf("%s",xmltext);
     430    _tmpBuf.appendf("%s",Rp_ParserXmlXml(parser));
     431    d->retStr = _tmpBuf.bytes();
    424432    Rp_ParserXmlDestroy(&parser);
    425433}
  • trunk/src/objects/RpNumber.h

    r1566 r1569  
    5858
    5959
    60         void configure(size_t as, ClientData p);
    61         void dump(size_t as, ClientData p);
    62         // const char* xml(size_t indent, size_t tabstop);
     60        void configure(size_t as, ClientData c);
     61        void dump(size_t as, ClientData c);
    6362
    6463        const int is() const;
     
    8584        };
    8685
    87         void __configureFromXml(const char *p);
    88         void __configureFromTree(Rp_ParserXml *p);
     86        void __configureFromXml(ClientData c);
     87        void __configureFromTree(ClientData c);
    8988        void __dumpToXml(ClientData c);
    9089        void __dumpToTree(ClientData c);
  • trunk/src/objects/RpObject.cc

    r1566 r1569  
    312312
    313313void
    314 Object::configure(size_t as, void *p)
    315 {
    316     return;
    317 }
    318 
    319 void
    320 Object::dump(size_t as, void *p)
     314Object::configure(size_t as, ClientData c)
     315{
     316    return;
     317}
     318
     319void
     320Object::dump(size_t as, ClientData c)
    321321{
    322322    return;
  • trunk/src/objects/RpObject.h

    r1566 r1569  
    7878
    7979        // configure the object properties based on Rappture1.1 xml text
    80         virtual void configure(size_t as, void *p);
    81         virtual void dump(size_t as, void *p);
     80        virtual void configure(size_t as, ClientData c);
     81        virtual void dump(size_t as, ClientData c);
    8282
    8383        virtual const int is() const;
     
    9898        /// close out the object, freeing its memory
    9999        void __clear();
    100 
    101100};
    102101
  • trunk/src/objects/RpPath.cc

    r1566 r1569  
    409409}
    410410
     411Path&
     412Path::clear ()
     413{
     414    __pathFree();
     415    __pathInit();
     416    return *this;
     417}
     418
    411419size_t
    412420Path::count ()
  • trunk/src/objects/RpPath.h

    r1560 r1569  
    5454    Path& next();
    5555    Path& last();
     56    Path& clear();
    5657    size_t count();
    5758
  • trunk/src/objects/RpPlot.cc

    r1568 r1569  
    3434{
    3535    // this->path(autopath());
    36     this->path("");
     36    this->name("");
     37    this->path("run");
    3738    this->label("");
    3839    this->desc("");
     
    9192    }
    9293
    93     // Path cpath;
    94     // cpath.id(name);
    95     // c->path(cpath.path());
    9694    c->name(name);
    9795
     
    252250
    253251/**********************************************************************/
    254 // METHOD: xml()
    255 /// Return the xml of this object
    256 /**
    257  * returns the xml of this object
    258  */
    259 
    260 const char *
    261 Plot::xml(size_t indent, size_t tabstop)
    262 {
     252// METHOD: configure(Rp_ParserXml *c)
     253/// construct a number object from the provided tree
     254/**
     255 * construct a number object from the provided tree
     256 */
     257
     258void
     259Plot::configure(size_t as, ClientData c)
     260{
     261    if (as == RPCONFIG_XML) {
     262        __configureFromXml(c);
     263    } else if (as == RPCONFIG_TREE) {
     264        __configureFromTree(c);
     265    }
     266}
     267
     268/**********************************************************************/
     269// METHOD: configureFromXml(const char *xmltext)
     270/// configure the object based on Rappture1.1 xmltext
     271/**
     272 * Configure the object based on the provided xml
     273 */
     274
     275void
     276Plot::__configureFromXml(ClientData c)
     277{
     278    const char *xmltext = (const char *) c;
     279    if (xmltext == NULL) {
     280        // FIXME: setup error
     281        return;
     282    }
     283
     284    Rp_ParserXml *p = Rp_ParserXmlCreate();
     285    Rp_ParserXmlParse(p, xmltext);
     286    configure(RPCONFIG_TREE, p);
     287
     288    return;
     289}
     290
     291// FIXME: this is an incomplete definition of how to
     292//        configure a plot object from a tree because there
     293//        currently is no xml description for plot objects
     294void
     295Plot::__configureFromTree(ClientData c)
     296{
     297    Rp_ParserXml *p = (Rp_ParserXml *)c;
     298    if (p == NULL) {
     299        // FIXME: setup error
     300        return;
     301    }
     302
     303    Rp_TreeNode node = Rp_ParserXmlElement(p,NULL);
     304
     305    Rappture::Path pathObj(Rp_ParserXmlNodePath(p,node));
     306
     307    path(pathObj.parent());
     308    name(Rp_ParserXmlNodeId(p,node));
     309
     310    return;
     311}
     312
     313/**********************************************************************/
     314// METHOD: dump(size_t as, void *p)
     315/// construct a number object from the provided tree
     316/**
     317 * construct a number object from the provided tree
     318 */
     319
     320void
     321Plot::dump(size_t as, ClientData c)
     322{
     323    if (as == RPCONFIG_XML) {
     324        __dumpToXml(c);
     325    } else if (as == RPCONFIG_TREE) {
     326        __dumpToTree(c);
     327    }
     328}
     329
     330/**********************************************************************/
     331// METHOD: dumpToXml(ClientData c)
     332/// configure the object based on Rappture1.1 xmltext
     333/**
     334 * Configure the object based on the provided xml
     335 */
     336
     337void
     338Plot::__dumpToXml(ClientData c)
     339{
     340    if (c == NULL) {
     341        // FIXME: setup error
     342        return;
     343    }
     344
     345    ClientDataXml *d = (ClientDataXml *) c;
     346    Rp_ParserXml *parser = Rp_ParserXmlCreate();
     347    __dumpToTree(parser);
     348    _tmpBuf.appendf("%s",Rp_ParserXmlXml(parser));
     349    d->retStr = _tmpBuf.bytes();
     350    Rp_ParserXmlDestroy(&parser);
     351}
     352
     353/**********************************************************************/
     354// METHOD: dumpToTree(ClientData p)
     355/// dump the object to a Rappture1.1 based tree
     356/**
     357 * Dump the object to a Rappture1.1 based tree
     358 */
     359
     360void
     361Plot::__dumpToTree(ClientData c)
     362{
     363    if (c == NULL) {
     364        // FIXME: setup error
     365        return;
     366    }
     367
     368    Rp_ParserXml *parser = (Rp_ParserXml *)c;
     369
     370    Path p;
     371
     372    p.parent(path());
     373    p.last();
    263374
    264375    Rp_ChainLink *l = NULL;
    265 
    266     _tmpBuf.clear();
    267 
    268     Rp_ParserXml *parser = Rp_ParserXmlCreate();
    269376
    270377    l = Rp_ChainFirstLink(_curveList);
     
    279386            // FIXME: check fields to see if the user specified value
    280387            // plot defined curve, use plot's labels in curve's xml
     388            c->group(label());
     389            c->label(label());
     390            c->desc(desc());
     391
     392
    281393            const char *xlabel = propstr("xlabel");
    282394            const char *xdesc  = propstr("xdesc");
     
    303415                cyaxis->scale(yscale);
    304416            }
     417
    305418        }
    306419
     
    308421        l = Rp_ChainNextLink(l);
    309422    }
    310     _tmpBuf.appendf("%s",Rp_ParserXmlXml(parser));
    311     Rp_ParserXmlDestroy(&parser);
    312 
    313     // remove trailing newline
    314     //_tmpBuf.remove(1);
    315     // append terminating null character
    316     //_tmpBuf.append("\0",1);
    317 
    318     return _tmpBuf.bytes();
    319423}
    320424
  • trunk/src/objects/RpPlot.h

    r1560 r1569  
    4242        Curve *getNthCurve(size_t n) const;
    4343
    44         const char *xml(size_t indent, size_t tabstop);
     44        void configure(size_t as, ClientData p);
     45        void dump(size_t as, ClientData p);
     46
    4547        const int is() const;
    4648
    4749    private:
    4850
    49         // hash or linked list of preset values
     51        // hash or linked list of curves
    5052        Rp_Chain *_curveList;
    5153
     
    6062        Rp_ChainLink *__searchCurveList(const char *name) const;
    6163        static int __curveCopyFxn(void **to, void *from);
     64
     65        void __configureFromXml(ClientData c);
     66        void __configureFromTree(ClientData c);
     67        void __dumpToXml(ClientData c);
     68        void __dumpToTree(ClientData c);
    6269};
    6370
Note: See TracChangeset for help on using the changeset viewer.