#ifndef STRING_HEADER
#define STRING_HEADER

class String
{
friend String operator + (const String, const String);
public:
	typedef unsigned SizeType;

	class OutOfRange{};

private:
	char *data;
	SizeType length;

	String(const SizeType length);

public:
	String();
	String(const char *text);
	String(const char c);
	String(const String &string);
	~String();

	bool operator == (const String string) const;
	bool operator != (const String string) const;
	bool operator > (const String string) const;
	bool operator < (const String string) const;
	bool operator >= (const String string) const;
	bool operator <= (const String string) const;
	String& operator = (const String string);
	String& operator +=(const String string);
	char& operator [] (const SizeType index);
	const char& operator [] (const SizeType index) const;

	String SubString(const SizeType from, const SizeType to) const;
	SizeType Find(const char c, const SizeType from = 0) const;
	void Cut(const SizeType from, const SizeType to);

public:
	inline SizeType GetLength() const {return length;}
	inline const char* CStr() const {return data;}
};

String operator + (const String s1, const String s2);

#endif
