commit cd70dfbc423ef04d2e1963b2e3983ea3800fdf54
parent 6e114bec1aeba28ac764467ad3b48600266819fb
Author: fundamental <mark.d.mccurry@gmail.com>
Date: Fri, 11 Sep 2009 16:31:22 -0400
Relocated/generalized utility functions
* Replaced int2str, real2str, str2int, and str2real from XMLwrapper with
stringTo<T> and stringFrom<T> function templates in Util.
* Moved newFFTFREQS and deleteFFTFREQS from Util to FFTwrapper
Diffstat:
7 files changed, 54 insertions(+), 89 deletions(-)
diff --git a/ChangeLog b/ChangeLog
@@ -894,8 +894,12 @@
- 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
- Removed multiple addparam methods and replaced it with one
variable argument function
+ - Replaced int2str, real2str, str2int, and str2real from XMLwrapper
+ with stringTo<T> and stringFrom<T> function templates in Util.
+ - Moved newFFTFREQS and deleteFFTFREQS from Util to FFTwrapper
diff --git a/src/DSP/FFTwrapper.cpp b/src/DSP/FFTwrapper.cpp
@@ -98,3 +98,19 @@ void FFTwrapper::freqs2smps(FFTFREQS freqs,REALTYPE *smps)
};
+void newFFTFREQS(FFTFREQS *f, int size)
+{
+ f->c = new REALTYPE[size];
+ f->s = new REALTYPE[size];
+ for (int i=0; i<size; i++) {
+ f->c[i] = 0.0;
+ f->s[i] = 0.0;
+ }
+}
+
+void deleteFFTFREQS(FFTFREQS *f)
+{
+ delete[] f->c;
+ delete[] f->s;
+ f->c = f->s = NULL;
+}
diff --git a/src/DSP/FFTwrapper.h b/src/DSP/FFTwrapper.h
@@ -63,5 +63,8 @@ private:
fftw_real *tmpfftdata1,*tmpfftdata2;
rfftw_plan planfftw,planfftw_inv;
};
+
+void newFFTFREQS(FFTFREQS *f, int size);
+void deleteFFTFREQS(FFTFREQS *f);
#endif
diff --git a/src/Misc/Util.cpp b/src/Misc/Util.cpp
@@ -104,19 +104,3 @@ bool fileexists(const char *filename)
return(false);
};
-void newFFTFREQS(FFTFREQS *f,int size)
-{
- f->c=new REALTYPE[size];
- f->s=new REALTYPE[size];
- for (int i=0;i<size;i++) {
- f->c[i]=0.0;
- f->s[i]=0.0;
- };
-};
-void deleteFFTFREQS(FFTFREQS *f)
-{
- delete[] f->c;
- delete[] f->s;
- f->c=f->s=NULL;
-};
-
diff --git a/src/Misc/Util.h b/src/Misc/Util.h
@@ -23,10 +23,9 @@
#ifndef UTIL_H
#define UTIL_H
-#include <pthread.h>
+#include <string>
+#include <sstream>
#include "../globals.h"
-#include "Microtonal.h"
-#include "../DSP/FFTwrapper.h"
#include "Config.h"
//Velocity Sensing function
@@ -41,5 +40,22 @@ extern REALTYPE *denormalkillbuf;/**<the buffer to add noise in order to avoid d
extern Config config;
+template <class T>
+std::string stringFrom(T x)
+{
+ std::stringstream ss;
+ ss << x;
+ return ss.str();
+}
+
+template <class T>
+T stringTo(std::string str)
+{
+ std::stringstream ss(str);
+ T ans;
+ ss >> ans;
+ return ans;
+}
+
#endif
diff --git a/src/Misc/XMLwrapper.cpp b/src/Misc/XMLwrapper.cpp
@@ -3,7 +3,9 @@
XMLwrapper.C - XML wrapper
Copyright (C) 2003-2005 Nasca Octavian Paul
+ Copyright (C) 2009-2009 Mark McCurry
Author: Nasca Octavian Paul
+ Mark McCurry
This program is free software; you can redistribute it and/or modify
it under the terms of version 2 of the GNU General Public License
@@ -220,12 +222,12 @@ int XMLwrapper::dosavefile(const char *filename,int compression,const char *xmld
void XMLwrapper::addpar(const string &name,int val)
{
- addparams("par",2,"name",name.c_str(),"value",int2str(val));
+ addparams("par",2,"name",name.c_str(),"value",stringFrom<int>(val).c_str());
};
void XMLwrapper::addparreal(const string &name,REALTYPE val)
{
- addparams("par_real",2,"name",name.c_str(),"value",real2str(val));
+ addparams("par_real",2,"name",name.c_str(),"value",stringFrom<REALTYPE>(val).c_str());
};
void XMLwrapper::addparbool(const string &name,int val)
@@ -255,7 +257,7 @@ void XMLwrapper::beginbranch(const string &name,int id)
if(verbose)
cout << "beginbranch(" << id << ")" << name << endl;
push(node);
- node=addparams(name.c_str(),1,"id",int2str(id));
+ node=addparams(name.c_str(),1,"id",stringFrom<int>(id).c_str());
};
void XMLwrapper::endbranch()
@@ -293,8 +295,8 @@ int XMLwrapper::loadXMLfile(const string &filename)
if (root==NULL) return(-3);//the XML doesnt embbed zynaddsubfx data
push(root);
- values.xml_version.major=str2int(mxmlElementGetAttr(root,"version-major"));
- values.xml_version.minor=str2int(mxmlElementGetAttr(root,"version-minor"));
+ values.xml_version.major=stringTo<int>(mxmlElementGetAttr(root,"version-major"));
+ values.xml_version.minor=stringTo<int>(mxmlElementGetAttr(root,"version-minor"));
return(0);
};
@@ -371,8 +373,7 @@ int XMLwrapper::enterbranch(const string &name,int id)
{
if(verbose)
cout << "enterbranch("<<id<<") " << name << endl;
- snprintf(tmpstr,TMPSTR_SIZE,"%d",id);
- node=mxmlFindElement(peek(),peek(),name.c_str(),"id",tmpstr,MXML_DESCEND_FIRST);
+ node=mxmlFindElement(peek(),peek(),name.c_str(),"id",stringFrom<int>(id).c_str(),MXML_DESCEND_FIRST);
if (node==NULL) return(0);
push(node);
@@ -391,7 +392,7 @@ void XMLwrapper::exitbranch()
int XMLwrapper::getbranchid(int min, int max) const
{
- int id=str2int(mxmlElementGetAttr(node,"id"));
+ int id=stringTo<int>(mxmlElementGetAttr(node,"id"));
if ((min==0)&&(max==0)) return(id);
if (id<min) id=min;
@@ -409,7 +410,7 @@ int XMLwrapper::getpar(const string &name,int defaultpar,int min,int max) const
const char *strval=mxmlElementGetAttr(tmp,"value");
if (strval==NULL) return(defaultpar);
- int val=str2int(strval);
+ int val=stringTo<int>(strval);
if (val<min) val=min;
else if (val>max) val=max;
@@ -455,7 +456,7 @@ REALTYPE XMLwrapper::getparreal(const char *name,REALTYPE defaultpar) const
const char *strval=mxmlElementGetAttr(tmp,"value");
if (strval==NULL) return(defaultpar);
- return(str2real(strval));
+ return(stringTo<REALTYPE>(strval));
};
REALTYPE XMLwrapper::getparreal(const char *name,REALTYPE defaultpar,REALTYPE min,REALTYPE max) const
@@ -470,32 +471,6 @@ REALTYPE XMLwrapper::getparreal(const char *name,REALTYPE defaultpar,REALTYPE mi
/** Private members **/
-char *XMLwrapper::int2str(int x)
-{
- snprintf(tmpstr,TMPSTR_SIZE,"%d",x);
- return(tmpstr);
-};
-
-char *XMLwrapper::real2str(REALTYPE x)
-{
- snprintf(tmpstr,TMPSTR_SIZE,"%g",x);
- return(tmpstr);
-};
-
-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) const
-{
- if (str==NULL) return(0.0);
- REALTYPE result=strtod(str,NULL);
- return(result);
-};
-
mxml_node_t *XMLwrapper::addparams(const char *name, unsigned int params, ...) const
{
/**@todo make this function send out a good error message if something goes
diff --git a/src/Misc/XMLwrapper.h b/src/Misc/XMLwrapper.h
@@ -232,7 +232,6 @@ private:
*/
char *doloadfile(const std::string &filename) const;
-
mxml_node_t *tree;/**<all xml data*/
mxml_node_t *root;/**<xml data used by zynaddsubfx*/
mxml_node_t *node;/**<current node*/
@@ -251,38 +250,6 @@ private:
*/
mxml_node_t *addparams(const char *name, unsigned int params, ...) const;
- /**
- * Convert integer to string
- * @param x integer input
- * @returns string output
- */
- char *int2str(int x);
-
- /**
- * Convert integer to string
- * @param x integer input
- * @returns string output
- */
- char *real2str(REALTYPE x);
-
- /**
- * Convert string to int
- * @param str string input
- * @returns integer output
- */
- int str2int(const char *str) const;
-
- /**
- * Convert string to realtype
- * @param x integer input
- * @returns string output
- */
- REALTYPE str2real(const char *str) const;
-
- /**Temporary string for various uses*/
- char tmpstr[TMPSTR_SIZE];
-
-
/**this is used to store the parents.
* @todo Use the stack class provided by C++*/
mxml_node_t *parentstack[STACKSIZE];