/* * stringdatum.cc * * This file is part of NEST. * * Copyright (C) 2004 The NEST Initiative * * NEST 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. * * NEST 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 NEST. If not, see <http://www.gnu.org/licenses/>. * */ #include "stringdatum.h" #include "datumconverter.h" #include "aggregatedatum_impl.h" #include "tokenutils.h" #include <algorithm> #include <cctype> // initialization of static members requires template<> // see Stroustrup C.13.1 --- HEP 2001-08-09 template<> sli::pool AggregateDatum<std::string,&SLIInterpreter::Stringtype>::memory( sizeof(AggregateDatum<std::string,&SLIInterpreter::Stringtype>),100,1); template <> void AggregateDatum<std::string,&SLIInterpreter::Stringtype>::pprint(std::ostream &out) const { out << '('; print(out); out << ')'; } // explicit template instantiation needed // because otherwise methods defined in // numericdatum_impl.h will not be instantiated // Moritz, 2007-04-16 template class AggregateDatum<std::string,&SLIInterpreter::Stringtype>; const ToUppercase_sFunction touppercase_sfunction; const ToLowercase_sFunction tolowercase_sfunction; /* BeginDocumentation Name: ToUppercase - Convert a string to upper case. Synopsis: (string) ToUppercase -> (string) Description: ToUppercase converts a string to upper case. If no upper case representation of a letter exists, the letter is kept unchanged. Examples: SLI ] (MiXeD cAsE) ToUppercase (MIXED CASE) Author: Jochen Martin Eppler SeeAlso: ToLowercase */ void ToUppercase_sFunction::execute(SLIInterpreter *i) const { i->assert_stack_load(1); StringDatum sd = getValue<StringDatum>(i->OStack.top()); std::string* str = dynamic_cast<std::string*>(&sd); std::transform(str->begin(), str->end(), str->begin(), toupper); i->OStack.pop(); i->OStack.push(new StringDatum(str->c_str())); i->EStack.pop(); } /* BeginDocumentation Name: ToLowercase - Convert a string to lower case. Synopsis: (string) ToLowercase -> (string) Description: ToLowercase converts a string to lower case. If no lower case representation of a letter exists, the letter is kept unchanged. Examples: SLI ] (MiXeD cAsE) ToLowercase (mixed case) Author: Jochen Martin Eppler SeeAlso: ToUppercase */ void ToLowercase_sFunction::execute(SLIInterpreter *i) const { i->assert_stack_load(1); StringDatum sd = getValue<StringDatum>(i->OStack.top()); std::string* str = dynamic_cast<std::string*>(&sd); std::transform(str->begin(), str->end(), str->begin(), tolower); i->OStack.pop(); i->OStack.push(new StringDatum(str->c_str())); i->EStack.pop(); } void init_slistring(SLIInterpreter *i) { i->createcommand("ToUppercase", &touppercase_sfunction); i->createcommand("ToLowercase", &tolowercase_sfunction); }