/* 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 #include #include 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 *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;ilength();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 *target, const vector *source) { sqprintf(target,"{"); vector::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;ilength();i++) { unsigned long len = target->length(); target->length(len+1); (*target)[len] = CORBA::string_dup((*source)[i]); } } #endif void appendStringSeq(vector *target, const vector *source) { vector::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,"{") && ilength()) parse_line((*seq)[i++],cmd,param); int brackets = 1; while(ilength()) { 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 *getSubStringSeq(const vector *seq,unsigned long& i) { vector *result = new vector; string cmd = "",param; while(cmd != "{" && isize()) parse_line((*seq)[i++],cmd,param); int brackets = 1; while(isize()) { 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; }