src/String.h

changeset 119
bdf8d46c145f
parent 118
e3361cf7cbf4
child 120
5ea0faefa82a
--- a/src/String.h	Sun Mar 30 21:35:06 2014 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,372 +0,0 @@
-/*
-	Copyright 2012-2014 Santeri Piippo
-	All rights reserved.
-
-	Redistribution and use in source and binary forms, with or without
-	modification, are permitted provided that the following conditions
-	are met:
-
-	1. Redistributions of source code must retain the above copyright
-	   notice, this list of conditions and the following disclaimer.
-	2. Redistributions in binary form must reproduce the above copyright
-	   notice, this list of conditions and the following disclaimer in the
-	   documentation and/or other materials provided with the distribution.
-	3. The name of the author may not be used to endorse or promote products
-	   derived from this software without specific prior written permission.
-
-	THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-	IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-	OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-	IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-	INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-	NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-	DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-	THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-	(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-	THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#ifndef BOTC_STRING_H
-#define BOTC_STRING_H
-
-#include <deque>
-#include <string>
-#include <stdarg.h>
-#include "Types.h"
-#include "Containers.h"
-
-class String;
-class StringList;
-
-// =============================================================================
-//
-class String
-{
-	public:
-		using StringType	= std::string;
-		using Iterator		= typename StringType::iterator;
-		using ConstIterator	= StringType::const_iterator;
-
-		String() {}
-
-		explicit String (char a) :
-			m_string (&a) {}
-
-		String (const char* data) :
-			m_string (data) {}
-
-		String (const StringType& data) :
-			m_string (data) {}
-
-		void				dump() const;
-		int					compare (const String& other) const;
-		bool				endsWith (const String& other);
-		int					count (char needle) const;
-		int					firstIndexOf (const char* c, int a = 0) const;
-		int					lastIndexOf (const char* c, int a = -1) const;
-		String				toLowercase() const;
-		bool				isNumeric() const;
-		bool				maskAgainst (const String& pattern) const;
-		int					wordPosition (int n) const;
-		void				replace (const char* a, const char* b);
-		StringList			split (const String& del) const;
-		StringList			split (char del) const;
-		void				sprintf (const char* fmtstr, ...);
-		bool				startsWith (const String& other);
-		String				strip (const List<char>& unwanted);
-		String				mid (long a, long b = -1) const;
-		double				toDouble (bool* ok = nullptr) const;
-		float				toFloat (bool* ok = nullptr) const;
-		long				toLong (bool* ok = nullptr, int base = 10) const;
-		void				trim (int n);
-		String				toUppercase() const;
-
-		String				operator+ (const String& data) const;
-		String				operator+ (const char* data) const;
-
-		static String		fromNumber (int a);
-		static String		fromNumber (long a);
-
-		inline bool isEmpty() const
-		{
-			return m_string[0] == '\0';
-		}
-
-		inline void append (const char* data)
-		{
-			m_string.append (data);
-		}
-
-		inline void append (char data)
-		{
-			m_string.push_back (data);
-		}
-
-		inline void append (const String& data)
-		{
-			m_string.append (data.chars());
-		}
-
-		inline Iterator begin()
-		{
-			return m_string.begin();
-		}
-
-		inline ConstIterator begin() const
-		{
-			return m_string.cbegin();
-		}
-
-		inline const char* chars() const
-		{
-			return m_string.c_str();
-		}
-
-		inline const char* c_str() const
-		{
-			return m_string.c_str();
-		}
-
-		inline Iterator end()
-		{
-			return m_string.end();
-		}
-
-		inline ConstIterator end() const
-		{
-			return m_string.end();
-		}
-
-		inline void clear()
-		{
-			m_string.clear();
-		}
-
-		inline void removeAt (int pos)
-		{
-			m_string.erase (m_string.begin() + pos);
-		}
-
-		inline void insert (int pos, char c)
-		{
-			m_string.insert (m_string.begin() + pos, c);
-		}
-
-		inline int length() const
-		{
-			return m_string.length();
-		}
-
-		inline void remove (int pos, int len)
-		{
-			m_string.replace (pos, len, "");
-		}
-
-		inline void removeFromStart (int len)
-		{
-			remove (0, len);
-		}
-
-		inline void removeFromEnd (int len)
-		{
-			remove (length() - len, len);
-		}
-
-		inline void replace (int pos, int n, const String& a)
-		{
-			m_string.replace (pos, n, a.chars());
-		}
-
-		inline void shrinkToFit()
-		{
-			m_string.shrink_to_fit();
-		}
-
-		inline const StringType& stdString() const
-		{
-			return m_string;
-		}
-
-		inline String strip (char unwanted)
-		{
-			return strip ({unwanted});
-		}
-
-		// =============================================================================
-		//
-		inline String operator+ (int num) const
-		{
-			return *this + String::fromNumber (num);
-		}
-
-		// =============================================================================
-		//
-		inline String& operator+= (const String data)
-		{
-			append (data);
-			return *this;
-		}
-
-		// =============================================================================
-		//
-		inline String& operator+= (const char* data)
-		{
-			append (data);
-			return *this;
-		}
-
-		// =============================================================================
-		//
-		inline String& operator+= (int num)
-		{
-			return operator+= (String::fromNumber (num));
-		}
-
-		// =============================================================================
-		//
-		inline void prepend (String a)
-		{
-			m_string = (a + m_string).stdString();
-		}
-
-		// =============================================================================
-		//
-		inline String& operator+= (const char data)
-		{
-			append (data);
-			return *this;
-		}
-
-		// =============================================================================
-		//
-		inline String operator- (int n) const
-		{
-			String newString = m_string;
-			newString -= n;
-			return newString;
-		}
-
-		// =============================================================================
-		//
-		inline String& operator-= (int n)
-		{
-			trim (n);
-			return *this;
-		}
-
-		// =============================================================================
-		//
-		inline String operator+() const
-		{
-			return toUppercase();
-		}
-
-		// =============================================================================
-		//
-		inline String operator-() const
-		{
-			return toLowercase();
-		}
-
-		// =============================================================================
-		//
-		inline bool operator== (const String& other) const
-		{
-			return stdString() == other.stdString();
-		}
-
-		// =============================================================================
-		//
-		inline bool operator== (const char* other) const
-		{
-			return operator== (String (other));
-		}
-
-		// =============================================================================
-		//
-		inline bool operator!= (const String& other) const
-		{
-			return stdString() != other.stdString();
-		}
-
-		// =============================================================================
-		//
-		inline bool operator!= (const char* other) const
-		{
-			return operator!= (String (other));
-		}
-
-		// =============================================================================
-		//
-		inline bool operator> (const String& other) const
-		{
-			return stdString() > other.stdString();
-		}
-
-		// =============================================================================
-		//
-		inline bool operator< (const String& other) const
-		{
-			return stdString() < other.stdString();
-		}
-
-		// =============================================================================
-		//
-		inline operator const char*() const
-		{
-			return chars();
-		}
-
-		// =============================================================================
-		//
-		inline operator const StringType&() const
-		{
-			return stdString();
-		}
-
-		// =============================================================================
-		//
-		// Difference between indices @a and @b. @b can be -1, in which
-		// case it will be length() - 1.
-		//
-		inline int indexDifference (int a, int b)
-		{
-			assert (b == -1 || b >= a);
-			return (b != -1 ? b - a : length() - 1 - a);
-		}
-
-	private:
-		StringType m_string;
-};
-
-// =============================================================================
-//
-class StringList : public List<String>
-{
-	public:
-		StringList() {}
-		StringList (std::initializer_list<String> vals) :
-			List<String> (vals) {}
-		StringList (const List<String>& a) : List<String> (a.deque()) {}
-		StringList (const WrappedList& a) : List<String> (a) {}
-
-		String join (const String& delim);
-};
-
-
-// =============================================================================
-//
-inline bool operator== (const char* a, const String& b)
-{
-	return b == a;
-}
-
-
-// =============================================================================
-//
-inline String operator+ (const char* a, const String& b)
-{
-	return String (a) + b;
-}
-
-#endif // BOTC_STRING_H

mercurial