Path: blob/devel/ElmerGUI/netgen/libsrc/general/mystring.cpp
3206 views
1//**************************************************************2//3// filename: mystring.cpp4//5// project: doctoral thesis6//7// autor: Dipl.-Ing. Gerstmayr Johannes8//9// generated: 20.12.9810// last change: 20.12.9811// description: implementation for strings12// remarks:13//14//**************************************************************1516// string class17#include <mystdlib.h>18#include <myadt.hpp>1920#include <linalg.hpp>21#include <gprim.hpp>2223/*24#include <iostream.h>25#include <string.h>26#include <stdlib.h>27#include <stdio.h>28#include <math.h>29#include <fstream.h>30#include "mystring.hh"3132*/3334namespace netgen35{363738void ReadEnclString(istream & in, string & str, const char encl)39{40char currchar;41str = "";4243in.get(currchar);44while(in && currchar == ' ' || currchar == '\t' || currchar == '\n')45in.get(currchar);4647if(currchar == encl)48{49in.get(currchar);50while(in && currchar != encl)51{52str += currchar;53in.get(currchar);54}55}56else57{58in.putback(currchar);59in >> str;60}61}62636465666768void DefaultStringErrHandler()69{70cerr << "Error : string operation out of range\n" << flush;71}7273void (*MyStr::ErrHandler)() = DefaultStringErrHandler;7475/*76MyStr::MyStr()77{78length = 0;79str = shortstr;80str[0] = 0;81}82*/8384MyStr::MyStr(const char *s)85{86length = unsigned(strlen(s));8788if (length > SHORTLEN)89str = new char[length + 1];90else91str = shortstr;92strcpy(str, s);93}9495/*96MyStr::MyStr(char s)97{98length = 1;99str = shortstr;100str[0] = s;101str[1] = (char)0;102}103*/104105MyStr::MyStr(const MyStr& s)106{107length = s.length;108if (length > SHORTLEN)109str = new char[length + 1];110else111str = shortstr;112strcpy(str, s.str);113}114115MyStr::MyStr(int i)116{117char buffer[32];118sprintf(buffer, "%d", i);119length = unsigned(strlen(buffer));120if (length > SHORTLEN)121str = new char[length + 1];122else123str = shortstr;124strcpy(str, buffer);125}126127MyStr::MyStr(void * p)128{129char buffer[32];130sprintf(buffer, "%p", p);131length = unsigned(strlen(buffer));132if (length > SHORTLEN)133str = new char[length + 1];134else135str = shortstr;136strcpy(str, buffer);137}138139140MyStr::MyStr(long l)141{142char buffer[32];143sprintf(buffer, "%ld", l);144length = unsigned(strlen(buffer));145if (length > SHORTLEN)146str = new char[length + 1];147else148str = shortstr;149strcpy(str, buffer);150}151152MyStr::MyStr(double d)153{154char buffer[32];155//if (fabs(d) < 1E-100) {d = 0;}156sprintf(buffer, "%g", d);157length = unsigned(strlen(buffer));158if (length > SHORTLEN)159str = new char[length + 1];160else161str = shortstr;162strcpy(str, buffer);163}164165MyStr::MyStr(const Point3d& p)166{167char buffer[80];168//if (fabs(d) < 1E-100) {d = 0;}169sprintf(buffer, "[%g, %g, %g]", p.X(), p.Y(), p.Z());170length = unsigned(strlen(buffer));171if (length > SHORTLEN)172str = new char[length + 1];173else174str = shortstr;175strcpy(str, buffer);176}177178MyStr::MyStr(const Vec3d& p)179{180char buffer[80];181//if (fabs(d) < 1E-100) {d = 0;}182sprintf(buffer, "[%g, %g, %g]", p.X(), p.Y(), p.Z());183length = unsigned(strlen(buffer));184if (length > SHORTLEN)185str = new char[length + 1];186else187str = shortstr;188strcpy(str, buffer);189}190191MyStr::MyStr(unsigned n, int)192{193length = n;194if (length > SHORTLEN)195str = new char[length + 1];196else197str = shortstr;198str[n] = 0;199}200201MyStr::MyStr(const string & st)202{203length = unsigned(st.length());204if (length > SHORTLEN)205str = new char[length + 1];206else207str = shortstr;208strcpy (str, st.c_str());209}210211212213MyStr MyStr::Left(unsigned r)214{215if(r > length)216{217MyStr::ErrHandler();218MyStr s;219return s;220}221else222{223MyStr tmp(r, 0);224strncpy(tmp.str, str, r);225return tmp;226}227}228229MyStr MyStr::Right(unsigned l)230{231if(l > length)232{233MyStr::ErrHandler();234MyStr s;235return s;236}237else238{239MyStr tmp(l, 0);240strncpy(tmp.str, str + length - l, l);241return tmp;242}243}244245MyStr& MyStr::InsertAt(unsigned pos, const MyStr& s)246{247if(pos > length)248{249MyStr::ErrHandler();250return *this;251}252int newLength = length + s.length;253char *tmp = new char[newLength + 1];254strncpy(tmp, str, pos);255strcpy(tmp + pos, s.str);256strcpy(tmp + pos + s.length, str + pos);257258if (length > SHORTLEN) delete [] str;259length = newLength;260if (length > SHORTLEN)261str = tmp;262else263{264strcpy (shortstr, tmp);265delete [] tmp;266str = shortstr;267}268return *this;269}270271MyStr &MyStr::WriteAt(unsigned pos, const MyStr& s)272{273if(pos > length)274{275MyStr::ErrHandler();276return *this;277}278unsigned n = length - pos;279if(s.length < n)280n = s.length;281strncpy(str + pos, s.str, n);282return *this;283}284285void MyStr::ConvertTextToExcel()286{287/*288for (int i = 0; i < Length(); i++)289{290if ((*this)[i]==',') {(*this)[i] = ';';}291else if ((*this)[i]=='.') {(*this)[i] = ',';}292}293*/294}295296void MyStr::ConvertExcelToText()297{298/*299for (int i = 0; i < Length(); i++)300{301if ((*this)[i]==',') {(*this)[i] = '.';}302else if ((*this)[i]==';') {(*this)[i] = ',';}303}304*/305}306307MyStr& MyStr::operator = (const MyStr& s)308{309if (length > SHORTLEN) delete [] str;310length = s.length;311if (length > SHORTLEN)312str = new char[length + 1];313else314str = shortstr;315strcpy(str, s.str);316return *this;317}318319MyStr operator + (const MyStr& s1, const MyStr& s2)320{321MyStr tmp(s1.length + s2.length, 0);322if (s1.length != 0) strcpy(tmp.str, s1.str);323if (s2.length != 0) strcpy(tmp.str + s1.length, s2.str);324return tmp;325}326327void MyStr::operator += (const MyStr& s)328{329if (length+s.length <= SHORTLEN)330{331if (s.length != 0) strcpy(shortstr + length, s.str);332}333else334{335char *tmp = new char[length + s.length + 1];336if (length != 0) strcpy(tmp, str);337if (s.length != 0) strcpy(tmp + length, s.str);338if (length > SHORTLEN) delete [] str;339length += s.length;340str = tmp;341}342}343344char& MyStr::operator [] (unsigned n)345{346static char dummy;347if(n < length)348return str[n];349else350{351MyStr::ErrHandler();352return dummy;353}354}355356char MyStr::operator [] (unsigned n) const357{358static char dummy;359if(n < length)360return str[n];361else362{363MyStr::ErrHandler();364return dummy;365}366}367368MyStr MyStr::operator () (unsigned l, unsigned r)369{370if((l > r) || (r > length))371{372MyStr::ErrHandler();373MyStr s;374return s;375}376else377{378int n = r - l + 1;379MyStr tmp(n, 0);380strncpy(tmp.str, str + 1, n);381return tmp;382}383}384385string MyStr::cpp_string(void) const386{387string aux(str,length);388return aux;389}390391/*392istream& operator >> (istream& is, MyStr& s)393{394const int buflen = 1000;395char buffer[buflen+1];396397int end = 0;398s = "";399MyStr str;400401while (!end)402{403is.get(buffer, buflen);404str = MyStr(buffer);405s += str;406if (is.peek() == EOF) {end = 1;}407}408409return is;410}411*/412/*413#ifdef __borland414::ifstream& operator >> (::ifstream& is, MyStr& s) // wb415{ // wb416const int buflen = 1000; // wb417char buffer[buflen+1]; // wb418// wb419int end = 0; // wb420s = ""; // wb421MyStr str; // wb422// wb423while (!end) // wb424{ // wb425is.get(buffer, buflen); // wb426str = MyStr(buffer); // wb427s += str; // wb428if (is.peek() == EOF) {end = 1;} // wb429} // wb430// wb431return is; // wb432}433434#endif435*/436}437438439