3
Copyright (C) 1999 Stefan Westerfeld
6
This program is free software; you can redistribute it and/or modify
7
it under the terms of the GNU General Public License as published by
8
the Free Software Foundation; either version 2 of the License, or
9
(at your option) any later version.
11
This program is distributed in the hope that it will be useful,
12
but WITHOUT ANY WARRANTY; without even the implied warranty of
13
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
GNU General Public License for more details.
16
You should have received a copy of the GNU General Public License
17
along with this program; if not, write to the Free Software
18
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22
#include "sequenceutils.h"
30
void sqprintf(ArtsCorba::StringSeq *list, const char *fmt, ...)
35
(void) vsnprintf(p, 1024, fmt, ap);
38
unsigned long len = list->length();
40
(*list)[len] = CORBA::string_dup(p);
44
void sqprintf(vector<string> *list, const char *fmt, ...)
49
(void) vsnprintf(p, 1024, fmt, ap);
55
int parse_line(const char *in, char *& cmd, char *& param)
57
int i,cmdlen=0,paramlen=0;
58
static char static_cmd[1000], static_param[1000];
64
while(in[i] == ' ' || in[i] == '\t') i++;
66
if(in[i] == 0) return(0);
68
while(in[i] != '=' && in[i] != 0) cmd[cmdlen++] = in[i++];
70
while(in[i] != 0) param[paramlen++] = in[i++];
75
if(paramlen) return(2);
80
int parse_line(const string& in, string& cmd, string& param)
83
int result = parse_line(in.c_str(),ccmd,cparam);
90
void addSubStringSeq(ArtsCorba::StringSeq *target, ArtsCorba::StringSeq *source)
95
for(i=0;i<source->length();i++)
97
unsigned long len = target->length();
98
target->length(len+1);
99
string srcstring = string(" ") + string((*source)[i]);
100
(*target)[len] = CORBA::string_dup(srcstring.c_str());
102
sqprintf(target,"}");
106
void addSubStringSeq(vector<string> *target, const vector<string> *source)
108
sqprintf(target,"{");
110
vector<string>::const_iterator i;
111
for(i=source->begin();i != source->end();i++)
112
target->push_back(" " + *i);
114
sqprintf(target,"}");
118
void appendStringSeq(ArtsCorba::StringSeq *target, ArtsCorba::StringSeq *source)
122
for(i=0;i<source->length();i++)
124
unsigned long len = target->length();
125
target->length(len+1);
126
(*target)[len] = CORBA::string_dup((*source)[i]);
131
void appendStringSeq(vector<string> *target, const vector<string> *source)
133
vector<string>::const_iterator i;
134
for(i=source->begin();i != source->end();i++)
135
target->push_back(*i);
139
ArtsCorba::StringSeq *getSubStringSeq(const ArtsCorba::StringSeq *seq,unsigned long& i)
141
ArtsCorba::StringSeq *result = new ArtsCorba::StringSeq;
143
char *cmd = empty,*param;
146
while(strcmp(cmd,"{") && i<seq->length())
147
parse_line((*seq)[i++],cmd,param);
151
while(i<seq->length())
153
parse_line((*seq)[i],cmd,param);
154
if(strcmp(cmd,"{") == 0) brackets++;
155
if(strcmp(cmd,"}") == 0) brackets--;
156
if(brackets == 0) return(result);
158
unsigned long len = result->length();
159
result->length(len+1);
160
(*result)[len] = CORBA::string_dup((*seq)[i]);
167
vector<string> *getSubStringSeq(const vector<string> *seq,unsigned long& i)
169
vector<string> *result = new vector<string>;
170
string cmd = "",param;
172
while(cmd != "{" && i<seq->size())
173
parse_line((*seq)[i++],cmd,param);
179
parse_line((*seq)[i],cmd,param);
180
if(cmd == "{") brackets++;
181
if(cmd == "}") brackets--;
182
if(brackets == 0) return(result);
184
result->push_back((*seq)[i]);