00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef CString_h
00027 #define CString_h
00028
00029 #include "Shared.h"
00030 #include <wtf/Vector.h>
00031
00032 using std::min;
00033
00034 namespace WebCore {
00035
00036 class DeprecatedCString;
00037
00038 class CStringBuffer : public Shared<CStringBuffer> {
00039 public:
00040 CStringBuffer(unsigned length) : m_vector(length) { }
00041
00042 char* data() { return m_vector.data(); }
00043 unsigned length() const { return m_vector.size(); }
00044
00045 private:
00046 Vector<char> m_vector;
00047 };
00048
00049
00050
00051 class CString {
00052 public:
00053 CString() { }
00054 CString(const char*);
00055 CString(const char*, unsigned length);
00056 static CString newUninitialized(size_t length, char*& characterBuffer);
00057
00058 const char* data() const;
00059 char* mutableData();
00060 unsigned length() const;
00061
00062 bool isNull() const { return !m_buffer; }
00063
00064 CString(const DeprecatedCString&);
00065 DeprecatedCString deprecatedCString() const;
00066
00067 private:
00068 void copyBufferIfNeeded();
00069 void init(const char*, unsigned length);
00070 RefPtr<CStringBuffer> m_buffer;
00071 };
00072
00073 bool operator==(const CString& a, const CString& b);
00074 inline bool operator!=(const CString& a, const CString& b) { return !(a == b); }
00075
00076 }
00077
00078 #endif // CString_h