You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdemultimedia/arts/runtime/sequenceutils.cc

189 lines
4.2 KiB

/*
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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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;
}