summaryrefslogtreecommitdiffstats
path: root/arts/runtime/sequenceutils.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'arts/runtime/sequenceutils.cpp')
-rw-r--r--arts/runtime/sequenceutils.cpp188
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;
+}