diff options
| author | Xavier ASUS <xavi92psx@gmail.com> | 2019-10-18 00:31:54 +0200 |
|---|---|---|
| committer | Xavier ASUS <xavi92psx@gmail.com> | 2019-10-18 00:31:54 +0200 |
| commit | 268a53de823a6750d6256ee1fb1e7707b4b45740 (patch) | |
| tree | 42c1799a9a82b2f7d9790ee9fe181d72a7274751 /sim/ucsim/gstring.h | |
| download | sdcc-gas-268a53de823a6750d6256ee1fb1e7707b4b45740.tar.gz | |
sdcc-3.9.0 fork implementing GNU assembler syntax
This fork aims to provide better support for stm8-binutils
Diffstat (limited to 'sim/ucsim/gstring.h')
| -rw-r--r-- | sim/ucsim/gstring.h | 312 |
1 files changed, 312 insertions, 0 deletions
diff --git a/sim/ucsim/gstring.h b/sim/ucsim/gstring.h new file mode 100644 index 0000000..d3c8cef --- /dev/null +++ b/sim/ucsim/gstring.h @@ -0,0 +1,312 @@ +/** + * Copyright 1999, 2000 by PC Drew + * + * All rights reserved. + * + * This file is a part of the gstring class - a string class for + * C++ programs. + * + * The gstring class, including all files distributed with it, + * is free software; you can redistribute it and/or use it and/or modify it + * under the terms of the Python License (http://www.python.org/doc/Copyright.html) + * + * 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. + * + */ + +#ifndef _GSTRING_H +#define _GSTRING_H + +//#include <iostream> +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#include <assert.h> +#include <ctype.h> + +class gstring +{ +public: + // Constructors. + gstring(void); + //gstring(char); + gstring(char*); + gstring(int); + gstring(double); + + // Copy Constructor. + gstring(const gstring&); + + // Destructor. + virtual ~gstring(void); + + // ASCII to Integer. + inline int a2i(void) + { + assert(str != NULL); + return (atoi(str)); + }; + + // ASCII to Double. + inline double a2d(void) + { + assert(str != NULL); + return (atof(str)); + }; + + // String length. + inline int length(void) + { + assert(str != NULL); + return (strlen(str)); + }; + + // Repeat the string _x times. + gstring& repeatme(int); + inline gstring repeat(int _x) + { + return (gstring(str).repeatme(_x)); + }; + + // Return the number of times _token appears in the string. + int ntokens(char*); + /*inline int ntokens(char _token) + { + return (ntokens((char*)_token)); + };*/ + inline int ntokens(gstring _token) + { + return (ntokens((char*)_token)); + }; + + // Return the number of times _token appears in the string, +1. + // This is, theoretically, the number of fields seperated by _token. + /*inline int nfields(char _token) + { + return (ntokens((char*)_token) + 1); + };*/ + inline int nfields(char* _token) + { + return (ntokens(_token) + 1); + }; + inline int nfields(gstring _token) + { + return (ntokens((char*)_token) + 1); + }; + + // Chop of the _xth character off the string. + gstring& chop(int = 1); + + // Return a substring. + gstring at(int, int); + gstring first(int = 1); + gstring last(int = 1); + + // Convert to upper case. + gstring& upcaseme(void); + inline gstring upcase(void) + { + return (gstring(str).upcaseme()); + }; + + // Convert to lower case. + gstring& downcaseme(void); + inline gstring downcase(void) + { + return (gstring(str).downcaseme()); + }; + + // Explode the string, delimted by a token, into an array of gstrings. + gstring* explode(char*); + /*inline gstring* explode(char _token) + { + return (explode((char*)_token)); + };*/ + inline gstring* explode(gstring _token) + { + return (explode((char*)_token)); + }; + + // Append. + gstring& append(char*); + /*inline gstring& append(char _s) + { + return (append((char*)_s)); + };*/ + inline gstring& append(const gstring& _gstr) + { + return (append((char*)_gstr)); + }; + + // Prepend. + gstring& prepend(char*); + /*inline gstring& prepend(char _s) + { + return (prepend((char*)_s)); + };*/ + inline gstring& prepend(gstring _gstr) + { + return (prepend((char*)_gstr)); + }; + + // Addition assignment operators. + /*inline gstring& operator +=(char _s) + { + return (append((char*)_s)); + };*/ + inline gstring& operator +=(char* _str) + { + return (append(_str)); + }; + inline gstring& operator +=(const gstring& _gstr) + { + return (append((char*)_gstr)); + }; + + // Assignment operators. + //gstring& operator =(char); + gstring& operator =(char *); + gstring& operator =(double); + gstring& operator =(const gstring&); + gstring& operator =(int); + + // Use for casting. You can do both (char*)gstring and + // (const char*)gstring. + * operator char(void) { return str; }; + * operator char(void) const { return str; }; + +private: + // Use for creating and destroying current gstrings. + int create(char* _str); + int destroy(void); + + // The string itself. + char* str; +}; + +// Useful for converting one array type to another. +char** tochararray(gstring*, int); +gstring* togstringarray(char**, int); + +// Implode an array of gstrings or char*s into a gstring. +gstring implode(char**, char*, int); +/*inline gstring implode(char** _strarr, char _token, int _num) +{ + return (implode(_strarr, (char*)_token, _num)); +};*/ +inline gstring implode(char** _strarr, gstring _token, int _num) +{ + return (implode(_strarr, (char*)_token, _num)); +}; +gstring implode(gstring*, char*, int); +/*inline gstring implode(gstring* _gstrarr, char _token, int _num) +{ + return (implode(_gstrarr, (char*)_token, _num)); +};*/ +inline gstring implode(gstring* _gstrarr, gstring _token, int _num) +{ + return (implode(_gstrarr, (char*)_token, _num)); +}; + +// Addition operators. +inline gstring operator +(const gstring& _gstr, char* _str) +{ + gstring gstr(_gstr); return (gstr.append(_str)); +}; +inline gstring operator +(char* _str, const gstring& _gstr) +{ + gstring gstr(_str); return (gstr.append(_gstr)); +}; +inline gstring operator +(const gstring& _gstr1, const gstring& _gstr2) +{ + gstring gstr(_gstr1); return (gstr.append(_gstr2)); +}; + +// Boolean equality operators. +/*inline bool operator ==(const gstring& _gstr, char _s) +{ + return (strcmp((char*)_gstr, (char*)_s) == 0); +};*/ +inline bool operator ==(const gstring& _gstr, char* _str) +{ + return (strcmp((char*)_gstr, _str) == 0); +}; +inline bool operator ==(const gstring& _gstr1, gstring _gstr2) +{ + return (strcmp((char*)_gstr1, (char*)_gstr2) == 0); +}; + +// Boolean inequality operators. +/*inline bool operator !=(const gstring& _gstr, char _s) +{ + return (strcmp((char*)_gstr, (char*)_s) != 0); +};*/ +inline bool operator !=(const gstring& _gstr, char* _str) +{ + return (strcmp((char*)_gstr, _str) != 0); +}; +inline bool operator !=(const gstring& _gstr1, const gstring& _gstr2) +{ + return (strcmp((char*)_gstr1, (char*)_gstr2) != 0); +}; + +// Boolean comparison operators. +/*inline bool operator <=(const gstring& _gstr, char _s) +{ + return (strcmp((char*)_gstr, (char*)_s) <= 0); +};*/ +inline bool operator <=(const gstring& _gstr, char* _str) +{ + return (strcmp((char*)_gstr, _str) <= 0); +}; +inline bool operator <=(const gstring& _gstr1, const gstring& _gstr2) +{ + return (strcmp((char*)_gstr1, (char*)_gstr2) <= 0); +}; +/*inline bool operator >=(const gstring& _gstr, char _s) +{ + return (strcmp((char*)_gstr, (char*)_s) >= 0); +};*/ +inline bool operator >=(const gstring& _gstr, char* _str) +{ + return (strcmp((char*)_gstr, _str) >= 0); +}; +inline bool operator >=(const gstring& _gstr1, const gstring& _gstr2) +{ + return (strcmp((char*)_gstr1, (char*)_gstr2) >= 0); +}; +/*inline bool operator <(const gstring& _gstr, char _s) +{ + return (strcmp((char*)_gstr, (char*)_s) < 0); +};*/ +inline bool operator <(const gstring& _gstr, char* _str) +{ + return (strcmp((char*)_gstr, _str) < 0); +}; +inline bool operator <(const gstring& _gstr1, const gstring& _gstr2) +{ + return (strcmp((char*)_gstr1, (char*)_gstr2) < 0); +}; +/*inline bool operator >(const gstring& _gstr, char _s) +{ + return (strcmp((char*)_gstr, (char*)_s) > 0); +};*/ +inline bool operator >(const gstring& _gstr, char* _str) +{ + return (strcmp((char*)_gstr, _str) > 0); +}; +inline bool operator >(const gstring& _gstr1, const gstring& _gstr2) +{ + return (strcmp((char*)_gstr1, (char*)_gstr2) > 0); +}; + +// Stream operators (i.e. cin >> gstring or cout << gstring). +/*inline ostream& operator <<(ostream& _out, const gstring _gstr) +{ + return (_out << (char*)_gstr); +}; +istream& operator >>(istream&, gstring&);*/ + +#endif |
