#ifndef NALL_STRING_BASE_HPP #define NALL_STRING_BASE_HPP #include #include #include #include #include #include #include #include namespace nall { class string; template inline string to_string(T); class string { public: inline void reserve(unsigned); inline string& assign(const char*); inline string& append(const char*); inline string& append(bool); inline string& append(signed int value); inline string& append(unsigned int value); inline string& append(double value); inline bool readfile(const char*); inline string& replace (const char*, const char*); inline string& qreplace(const char*, const char*); inline unsigned length() const; inline bool equals(const char*) const; inline bool iequals(const char*) const; inline bool wildcard(const char*) const; inline bool iwildcard(const char*) const; inline bool beginswith(const char*) const; inline bool ibeginswith(const char*) const; inline bool endswith(const char*) const; inline bool iendswith(const char*) const; inline string& lower(); inline string& upper(); inline string& transform(const char *before, const char *after); template inline string& ltrim(const char *key = " "); template inline string& rtrim(const char *key = " "); template inline string& trim (const char *key = " "); inline optional position(const char *key) const; inline optional qposition(const char *key) const; template inline string& operator= (T value); template inline string& operator<<(T value); inline operator const char*() const; inline char* operator()(); inline char& operator[](int); inline bool operator==(const char*) const; inline bool operator!=(const char*) const; inline bool operator< (const char*) const; inline bool operator<=(const char*) const; inline bool operator> (const char*) const; inline bool operator>=(const char*) const; inline string& operator=(const string&); inline string& operator=(string&&); template inline string(Args&&... args); inline string(const string&); inline string(string&&); inline ~string(); protected: char *data; unsigned size; #if defined(QSTRING_H) public: inline operator QString() const; #endif }; class lstring : public linear_vector { public: template inline lstring& operator<<(T value); inline optional find(const char*) const; template inline void split (const char*, const char*); template inline void qsplit(const char*, const char*); lstring(); lstring(std::initializer_list); }; //compare.hpp inline char chrlower(char c); inline char chrupper(char c); inline int stricmp(const char *str1, const char *str2); inline bool wildcard(const char *str, const char *pattern); inline bool iwildcard(const char *str, const char *pattern); inline bool strbegin (const char *str, const char *key); inline bool stribegin(const char *str, const char *key); inline bool strend (const char *str, const char *key); inline bool striend(const char *str, const char *key); //convert.hpp inline char* strlower(char *str); inline char* strupper(char *str); inline char* strtr(char *dest, const char *before, const char *after); inline uintmax_t strhex (const char *str); inline intmax_t strsigned (const char *str); inline uintmax_t strunsigned(const char *str); inline uintmax_t strbin (const char *str); inline double strdouble (const char *str); //math.hpp inline bool strint (const char *str, int &result); inline bool strmath(const char *str, int &result); //platform.hpp inline string realpath(const char *name); inline string userpath(); inline string currentpath(); //strl.hpp inline unsigned strlcpy(char *dest, const char *src, unsigned length); inline unsigned strlcat(char *dest, const char *src, unsigned length); //strpos.hpp inline optional strpos(const char *str, const char *key); inline optional qstrpos(const char *str, const char *key); //trim.hpp template inline char* ltrim(char *str, const char *key = " "); template inline char* rtrim(char *str, const char *key = " "); template inline char* trim (char *str, const char *key = " "); //utility.hpp inline unsigned strlcpy(string &dest, const char *src, unsigned length); inline unsigned strlcat(string &dest, const char *src, unsigned length); inline string substr(const char *src, unsigned start = 0, unsigned length = 0); template inline string strhex(uintmax_t value); template inline string strsigned(intmax_t value); template inline string strunsigned(uintmax_t value); template inline string strbin(uintmax_t value); inline unsigned strdouble(char *str, double value); inline string strdouble(double value); //variadic.hpp template inline void print(Args&&... args); }; #endif