zynaddsubfx

ZynAddSubFX open source synthesizer
Log | Files | Refs | Submodules | LICENSE

commit 54ceb82e758f6ac48a0edbac683609ff496b0d55
parent 025036fb72dead6c2e9279973b5ed3993b9da1a9
Author: fundamental <mark.d.mccurry@gmail.com>
Date:   Fri, 11 Sep 2009 10:02:19 -0400

Added const modifier within much of XMLwrapper

Diffstat:
MChangeLog | 4+++-
Msrc/Misc/XMLwrapper.cpp | 91+++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------
Msrc/Misc/XMLwrapper.h | 33+++++++++++++++++----------------
3 files changed, 79 insertions(+), 49 deletions(-)

diff --git a/ChangeLog b/ChangeLog @@ -894,4 +894,6 @@ - Fixed glitch in XMLwrapper, which would prevent file loading 11 Sep 2009 (Mark McCurry) - - moved PADsynth_used from public struct to has/set methods in XMLwrapper + - Moved PADsynth_used from public struct to has/set methods in XMLwrapper + - Created wrapper functions, so that XMLwrapper can be somewhat + usable when const diff --git a/src/Misc/XMLwrapper.cpp b/src/Misc/XMLwrapper.cpp @@ -72,6 +72,22 @@ const char *XMLwrapper_whitespace_callback(mxml_node_t *node,int where) return(0); }; +//temporary const overload of mxmlFindElement +const mxml_node_t *mxmlFindElement(const mxml_node_t *node, + const mxml_node_t *top, const char *name, const char *attr, + const char *value, int descend) +{ + return(const_cast<const mxml_node_t *> (mxmlFindElement( + const_cast<mxml_node_t *>(node), + const_cast<mxml_node_t *>(top), + name, attr, value, descend))); +} + +//temporary const overload of mxmlElementGetAttr +const char *mxmlElementGetAttr(const mxml_node_t *node, const char *name) +{ + return mxmlElementGetAttr(const_cast<mxml_node_t *>(node),name); +} XMLwrapper::XMLwrapper() { @@ -153,7 +169,7 @@ bool XMLwrapper::hasPadSynth() const /* SAVE XML members */ -int XMLwrapper::saveXMLfile(const string &filename) +int XMLwrapper::saveXMLfile(const string &filename) const { char *xmldata=getXMLdata(); if (xmldata==NULL) return(-2); @@ -165,7 +181,7 @@ int XMLwrapper::saveXMLfile(const string &filename) return(result); }; -char *XMLwrapper::getXMLdata() +char *XMLwrapper::getXMLdata() const { //xml_k=0; ZERO(tabs,STACKSIZE+2); @@ -176,7 +192,7 @@ char *XMLwrapper::getXMLdata() }; -int XMLwrapper::dosavefile(const char *filename,int compression,const char *xmldata) +int XMLwrapper::dosavefile(const char *filename,int compression,const char *xmldata) const { if (compression==0) { FILE *file; @@ -284,7 +300,7 @@ int XMLwrapper::loadXMLfile(const string &filename) }; -char *XMLwrapper::doloadfile(const string &filename) +char *XMLwrapper::doloadfile(const string &filename) const { char * xmldata = NULL; gzFile gzfile = gzopen(filename.c_str(),"rb"); @@ -373,7 +389,7 @@ void XMLwrapper::exitbranch() }; -int XMLwrapper::getbranchid(int min, int max) +int XMLwrapper::getbranchid(int min, int max) const { int id=str2int(mxmlElementGetAttr(node,"id")); if ((min==0)&&(max==0)) return(id); @@ -384,12 +400,13 @@ int XMLwrapper::getbranchid(int min, int max) return(id); }; -int XMLwrapper::getpar(const string &name,int defaultpar,int min,int max) +int XMLwrapper::getpar(const string &name,int defaultpar,int min,int max) const { - node=mxmlFindElement(peek(),peek(),"par","name",name.c_str(),MXML_DESCEND_FIRST); - if (node==NULL) return(defaultpar); + const mxml_node_t * tmp = mxmlFindElement(peek(),peek(),"par","name",name.c_str(),MXML_DESCEND_FIRST); + + if (tmp==NULL) return(defaultpar); - const char *strval=mxmlElementGetAttr(node,"value"); + const char *strval=mxmlElementGetAttr(tmp,"value"); if (strval==NULL) return(defaultpar); int val=str2int(strval); @@ -399,48 +416,49 @@ int XMLwrapper::getpar(const string &name,int defaultpar,int min,int max) return(val); }; -int XMLwrapper::getpar127(const string &name,int defaultpar) +int XMLwrapper::getpar127(const string &name,int defaultpar) const { return(getpar(name,defaultpar,0,127)); }; -int XMLwrapper::getparbool(const string &name,int defaultpar) +int XMLwrapper::getparbool(const string &name,int defaultpar) const { - node=mxmlFindElement(peek(),peek(),"par_bool","name",name.c_str(),MXML_DESCEND_FIRST); - if (node==NULL) return(defaultpar); + const mxml_node_t * tmp = mxmlFindElement(peek(),peek(),"par_bool","name",name.c_str(),MXML_DESCEND_FIRST); - const char *strval=mxmlElementGetAttr(node,"value"); + if (tmp==NULL) return(defaultpar); + + const char *strval=mxmlElementGetAttr(tmp,"value"); if (strval==NULL) return(defaultpar); if ((strval[0]=='Y')||(strval[0]=='y')) return(1); else return(0); }; -void XMLwrapper::getparstr(const string &name,char *par,int maxstrlen) +void XMLwrapper::getparstr(const string &name,char *par,int maxstrlen) const { ZERO(par,maxstrlen); - node=mxmlFindElement(peek(),peek(),"string","name",name.c_str(),MXML_DESCEND_FIRST); + const mxml_node_t * tmp = mxmlFindElement(peek(),peek(),"string","name",name.c_str(),MXML_DESCEND_FIRST); - if (node==NULL) return; - if (node->child==NULL) return; - if (node->child->type!=MXML_OPAQUE) return; + if (tmp==NULL) return; + if (tmp->child==NULL) return; + if (tmp->child->type!=MXML_OPAQUE) return; - snprintf(par,maxstrlen,"%s",node->child->value.element.name); + snprintf(par,maxstrlen,"%s",tmp->child->value.element.name); }; -REALTYPE XMLwrapper::getparreal(const char *name,REALTYPE defaultpar) +REALTYPE XMLwrapper::getparreal(const char *name,REALTYPE defaultpar) const { - node=mxmlFindElement(peek(),peek(),"par_real","name",name,MXML_DESCEND_FIRST); - if (node==NULL) return(defaultpar); + const mxml_node_t * tmp = mxmlFindElement(peek(),peek(),"par_real","name",name,MXML_DESCEND_FIRST); + if (tmp==NULL) return(defaultpar); - const char *strval=mxmlElementGetAttr(node,"value"); + const char *strval=mxmlElementGetAttr(tmp,"value"); if (strval==NULL) return(defaultpar); return(str2real(strval)); }; -REALTYPE XMLwrapper::getparreal(const char *name,REALTYPE defaultpar,REALTYPE min,REALTYPE max) +REALTYPE XMLwrapper::getparreal(const char *name,REALTYPE defaultpar,REALTYPE min,REALTYPE max) const { REALTYPE result=getparreal(name,defaultpar); @@ -464,14 +482,14 @@ char *XMLwrapper::real2str(REALTYPE x) return(tmpstr); }; -int XMLwrapper::str2int(const char *str) +int XMLwrapper::str2int(const char *str) const { if (str==NULL) return(0); int result=strtol(str,NULL,10); return(result); }; -REALTYPE XMLwrapper::str2real(const char *str) +REALTYPE XMLwrapper::str2real(const char *str) const { if (str==NULL) return(0.0); REALTYPE result=strtod(str,NULL); @@ -479,20 +497,20 @@ REALTYPE XMLwrapper::str2real(const char *str) }; -mxml_node_t *XMLwrapper::addparams0(const char *name) +mxml_node_t *XMLwrapper::addparams0(const char *name) const { mxml_node_t *element=mxmlNewElement(node,name); return(element); }; -mxml_node_t *XMLwrapper::addparams1(const char *name,const char *par1,const char *val1) +mxml_node_t *XMLwrapper::addparams1(const char *name,const char *par1,const char *val1) const { mxml_node_t *element=mxmlNewElement(node,name); mxmlElementSetAttr(element,par1,val1); return(element); }; -mxml_node_t *XMLwrapper::addparams2(const char *name,const char *par1,const char *val1,const char *par2, const char *val2) +mxml_node_t *XMLwrapper::addparams2(const char *name,const char *par1,const char *val1,const char *par2, const char *val2) const { mxml_node_t *element=mxmlNewElement(node,name); mxmlElementSetAttr(element,par1,val1); @@ -540,7 +558,16 @@ mxml_node_t *XMLwrapper::peek() return (root); }; return(parentstack[stackpos]); -}; - +} +const mxml_node_t *XMLwrapper::peek() const +{ + if(verbose) + cout << "peek()const " << node << " : " << parentstack[stackpos] << "-" << node->value.element.name << " -" << parentstack[stackpos]->value.element.name << endl; + if (stackpos<=0) { + cerr << "BUG!: XMLwrapper::peek() - empty parentstack" << endl; + return (root); + }; + return(parentstack[stackpos]); +} diff --git a/src/Misc/XMLwrapper.h b/src/Misc/XMLwrapper.h @@ -54,14 +54,14 @@ public: * @param filename the name of the destination file. * @returns 0 if ok or -1 if the file cannot be saved. */ - int saveXMLfile(const std::string &filename); + int saveXMLfile(const std::string &filename) const; /** * Return XML tree as a string. * Note: The string must be freed with free() to deallocate * @returns a newly allocated NULL terminated string of the XML data. */ - char *getXMLdata(); + char *getXMLdata() const; /** * Add simple parameter. @@ -150,7 +150,7 @@ public: * if there isn't any id, will return min * this must be called only imediately after enterbranch() */ - int getbranchid(int min, int max); + int getbranchid(int min, int max) const; /** * Returns the integer value stored in node name. @@ -162,21 +162,21 @@ public: * @param min The minimum return value. * @param max The maximum return value. */ - int getpar(const std::string &name,int defaultpar,int min,int max); + int getpar(const std::string &name,int defaultpar,int min,int max) const; /** * Returns the integer value stored in the node with range [0,127]. * @param name The parameter name. * @param defaultpar The default value if the real value is not found. */ - int getpar127(const std::string &name,int defaultpar); + int getpar127(const std::string &name,int defaultpar) const; /** * Returns the boolean value stored in the node. * @param name The parameter name. * @param defaultpar The default value if the real value is not found. */ - int getparbool(const std::string &name,int defaultpar); + int getparbool(const std::string &name,int defaultpar) const; /** * Get the string value stored in the node. @@ -184,14 +184,14 @@ public: * @param par Pointer to destination string * @param maxstrlen Max string length for destination */ - void getparstr(const std::string &name,char *par,int maxstrlen); + void getparstr(const std::string &name,char *par,int maxstrlen) const; /** * Returns the real value stored in the node. * @param name The parameter name. * @param defaultpar The default value if the real value is not found. */ - REALTYPE getparreal(const char *name,REALTYPE defaultpar); + REALTYPE getparreal(const char *name,REALTYPE defaultpar) const; /** * Returns the real value stored in the node. @@ -200,7 +200,7 @@ public: * @param min The minimum value * @param max The maximum value */ - REALTYPE getparreal(const char *name,REALTYPE defaultpar,REALTYPE min,REALTYPE max); + REALTYPE getparreal(const char *name,REALTYPE defaultpar,REALTYPE min,REALTYPE max) const; bool minimal;/**<false if all parameters will be stored (used only for clipboard)*/ @@ -221,7 +221,7 @@ private: * @param compression Level of gzip compression * @param xmldata String to be saved */ - int dosavefile(const char *filename,int compression,const char *xmldata); + int dosavefile(const char *filename,int compression,const char *xmldata) const; /** * Loads specified file and returns data. @@ -230,7 +230,7 @@ private: * @param filename the file * @return The decompressed data */ - char *doloadfile(const std::string &filename); + char *doloadfile(const std::string &filename) const; mxml_node_t *tree;/**<all xml data*/ @@ -243,21 +243,21 @@ private: * <name>. * @returns The node */ - mxml_node_t *addparams0(const char *name); + mxml_node_t *addparams0(const char *name) const; /** * Adds params like this: * <name par1="val1">. * @returns The node */ - mxml_node_t *addparams1(const char *name,const char *par1,const char *val1); + mxml_node_t *addparams1(const char *name,const char *par1,const char *val1) const; /** * Adds params like this: * <name par1="val1" par2="val2">. * @returns the node */ - mxml_node_t *addparams2(const char *name,const char *par1,const char *val1,const char *par2, const char *val2); + mxml_node_t *addparams2(const char *name,const char *par1,const char *val1,const char *par2, const char *val2) const; /** * Convert integer to string @@ -278,14 +278,14 @@ private: * @param str string input * @returns integer output */ - int str2int(const char *str); + int str2int(const char *str) const; /** * Convert string to realtype * @param x integer input * @returns string output */ - REALTYPE str2real(const char *str); + REALTYPE str2real(const char *str) const; /**Temporary string for various uses*/ char tmpstr[TMPSTR_SIZE]; @@ -303,6 +303,7 @@ private: mxml_node_t *pop(); /**Returns top node off of parent stack*/ mxml_node_t *peek(); + const mxml_node_t *peek() const; struct { struct {