diff options
Diffstat (limited to 'arts/runtime/sequenceutils.cpp')
-rw-r--r-- | arts/runtime/sequenceutils.cpp | 188 |
1 files changed, 188 insertions, 0 deletions
diff --git a/arts/runtime/sequenceutils.cpp b/arts/runtime/sequenceutils.cpp new file mode 100644 index 00000000..335287d4 --- /dev/null +++ b/arts/runtime/sequenceutils.cpp @@ -0,0 +1,188 @@ + /* + + Copyright (C) 1999 Stefan Westerfeld + stefan@space.twc.de + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + */ + +#include "sequenceutils.h" +#include <stdarg.h> +#include <stdio.h> +#include <config.h> + +using namespace std; + +#if 0 +void sqprintf(ArtsCorba::StringSeq *list, const char *fmt, ...) +{ + char p[1024]; + va_list ap; + va_start(ap, fmt); + (void) vsnprintf(p, 1024, fmt, ap); + va_end(ap); + + unsigned long len = list->length(); + list->length(len+1); + (*list)[len] = CORBA::string_dup(p); +} +#endif + +void sqprintf(vector<string> *list, const char *fmt, ...) +{ + char p[1024]; + va_list ap; + va_start(ap, fmt); + (void) vsnprintf(p, 1024, fmt, ap); + va_end(ap); + + list->push_back(p); +} + +int parse_line(const char *in, char *& cmd, char *& param) +{ + int i,cmdlen=0,paramlen=0; + static char static_cmd[1000], static_param[1000]; + + cmd = static_cmd; + param = static_param; + i = 0; + + while(in[i] == ' ' || in[i] == '\t') i++; + + if(in[i] == 0) return(0); + + while(in[i] != '=' && in[i] != 0) cmd[cmdlen++] = in[i++]; + if(in[i] != 0) i++; + while(in[i] != 0) param[paramlen++] = in[i++]; + + cmd[cmdlen] = 0; + param[paramlen] = 0; + + if(paramlen) return(2); + if(cmdlen) return(1); + return(0); +} + +int parse_line(const string& in, string& cmd, string& param) +{ + char *ccmd, *cparam; + int result = parse_line(in.c_str(),ccmd,cparam); + param = cparam; + cmd = ccmd; + return result; +} + +#if 0 +void addSubStringSeq(ArtsCorba::StringSeq *target, ArtsCorba::StringSeq *source) +{ + unsigned long i; + + sqprintf(target,"{"); + for(i=0;i<source->length();i++) + { + unsigned long len = target->length(); + target->length(len+1); + string srcstring = string(" ") + string((*source)[i]); + (*target)[len] = CORBA::string_dup(srcstring.c_str()); + } + sqprintf(target,"}"); +} +#endif + +void addSubStringSeq(vector<string> *target, const vector<string> *source) +{ + sqprintf(target,"{"); + + vector<string>::const_iterator i; + for(i=source->begin();i != source->end();i++) + target->push_back(" " + *i); + + sqprintf(target,"}"); +} + +#if 0 +void appendStringSeq(ArtsCorba::StringSeq *target, ArtsCorba::StringSeq *source) +{ + unsigned long i; + + for(i=0;i<source->length();i++) + { + unsigned long len = target->length(); + target->length(len+1); + (*target)[len] = CORBA::string_dup((*source)[i]); + } +} +#endif + +void appendStringSeq(vector<string> *target, const vector<string> *source) +{ + vector<string>::const_iterator i; + for(i=source->begin();i != source->end();i++) + target->push_back(*i); +} + +#if 0 +ArtsCorba::StringSeq *getSubStringSeq(const ArtsCorba::StringSeq *seq,unsigned long& i) +{ + ArtsCorba::StringSeq *result = new ArtsCorba::StringSeq; + char empty[1] = {0}; + char *cmd = empty,*param; + + + while(strcmp(cmd,"{") && i<seq->length()) + parse_line((*seq)[i++],cmd,param); + + int brackets = 1; + + while(i<seq->length()) + { + parse_line((*seq)[i],cmd,param); + if(strcmp(cmd,"{") == 0) brackets++; + if(strcmp(cmd,"}") == 0) brackets--; + if(brackets == 0) return(result); + + unsigned long len = result->length(); + result->length(len+1); + (*result)[len] = CORBA::string_dup((*seq)[i]); + i++; + } + return(result); +} +#endif + +vector<string> *getSubStringSeq(const vector<string> *seq,unsigned long& i) +{ + vector<string> *result = new vector<string>; + string cmd = "",param; + + while(cmd != "{" && i<seq->size()) + parse_line((*seq)[i++],cmd,param); + + int brackets = 1; + + while(i<seq->size()) + { + parse_line((*seq)[i],cmd,param); + if(cmd == "{") brackets++; + if(cmd == "}") brackets--; + if(brackets == 0) return(result); + + result->push_back((*seq)[i]); + i++; + } + return result; +} |