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:
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 {