2006-12-08 MorganL <morganl.webkit@yahoo.com>
[WebKit-https.git] / WebCore / platform / CString.h
index 63b913844fbd8badbd28e007a4ba65606db4b884..8119493de6fdf6e095afb1fdc4e703663132e00b 100644 (file)
 #ifndef CString_h
 #define CString_h
 
-#include <wtf/Vector.h>
 #include "Shared.h"
+#include <wtf/Vector.h>
 
 namespace WebCore {
+
     class DeprecatedCString;
     
     class CStringBuffer : public Shared<CStringBuffer> {
     public:
         CStringBuffer(unsigned length) : m_vector(length) { }
-        
+
         char* data() { return m_vector.data(); }
         unsigned length() const { return m_vector.size(); }
+
     private:
         Vector<char> m_vector;
     };
-    
+
+    // A container for a null-terminated char array supporting copy-on-write
+    // assignment.  The contained char array may be null.
     class CString {
     public:
         CString() { }
-        CString(const char* str);
-        CString(const char* str, unsigned length);
-        
-        const char* data() const;
+        CString(const char*);
+        CString(const char*, unsigned length);
+        static CString newUninitialized(size_t length, char*& characterBuffer);
+
+        const char* data() const { return m_buffer ? m_buffer->data() : 0; }
+        char* mutableData();
         unsigned length() const;
-        
+
         operator const char*() const { return data(); }        
         
         bool isNull() const { return !m_buffer; }
-        
-        CString(const DeprecatedCString& str);
+
+        CString(const DeprecatedCString&);
         DeprecatedCString deprecatedCString() const;
+
+        int find(const char*, int index=0) const;
+
     private:
-        void init(const char*str, unsigned length);
+        void copyBufferIfNeeded();
+        void init(const char*, unsigned length);
         RefPtr<CStringBuffer> m_buffer;
     };
-    
+
 }
 
 #endif // CString_h