Home | History | Annotate | Download | only in cpp
      1 /*
      2  * Copyright (C) Research In Motion Limited 2010. All rights reserved.
      3  * Copyright (C) 2009 Google Inc. All rights reserved.
      4  *
      5  * This library is free software; you can redistribute it and/or
      6  * modify it under the terms of the GNU Library General Public
      7  * License as published by the Free Software Foundation; either
      8  * version 2 of the License, or (at your option) any later version.
      9  *
     10  * This library is distributed in the hope that it will be useful,
     11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     13  * Library General Public License for more details.
     14  *
     15  * You should have received a copy of the GNU Library General Public License
     16  * along with this library; see the file COPYING.LIB.  If not, write to
     17  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
     18  * Boston, MA 02110-1301, USA.
     19  */
     20 
     21 #include "config.h"
     22 #include "WebDOMString.h"
     23 
     24 #include "WebDOMCString.h"
     25 #include <wtf/text/AtomicString.h>
     26 #include <wtf/text/CString.h>
     27 #include <wtf/text/WTFString.h>
     28 
     29 class WebDOMStringPrivate : public WTF::StringImpl {
     30 };
     31 
     32 void WebDOMString::reset()
     33 {
     34     if (m_private) {
     35         m_private->deref();
     36         m_private = 0;
     37     }
     38 }
     39 
     40 void WebDOMString::assign(const WebDOMString& other)
     41 {
     42     assign(const_cast<WebDOMStringPrivate*>(other.m_private));
     43 }
     44 
     45 void WebDOMString::assign(const WebUChar* data, size_t length)
     46 {
     47     assign(static_cast<WebDOMStringPrivate*>(
     48         WTF::StringImpl::create(data, length).get()));
     49 }
     50 
     51 size_t WebDOMString::length() const
     52 {
     53     return m_private ? const_cast<WebDOMStringPrivate*>(m_private)->length() : 0;
     54 }
     55 
     56 const WebUChar* WebDOMString::data() const
     57 {
     58     return m_private ? const_cast<WebDOMStringPrivate*>(m_private)->characters() : 0;
     59 }
     60 
     61 WebDOMCString WebDOMString::utf8() const
     62 {
     63     return WTF::String(m_private).utf8();
     64 }
     65 
     66 WebDOMString WebDOMString::fromUTF8(const char* data, size_t length)
     67 {
     68     return WTF::String::fromUTF8(data, length);
     69 }
     70 
     71 WebDOMString WebDOMString::fromUTF8(const char* data)
     72 {
     73     return WTF::String::fromUTF8(data);
     74 }
     75 
     76 WebDOMString::WebDOMString(const WTF::String& s)
     77     : m_private(static_cast<WebDOMStringPrivate*>(s.impl()))
     78 {
     79     if (m_private)
     80         m_private->ref();
     81 }
     82 
     83 WebDOMString& WebDOMString::operator=(const WTF::String& s)
     84 {
     85     assign(static_cast<WebDOMStringPrivate*>(s.impl()));
     86     return *this;
     87 }
     88 
     89 WebDOMString::operator WTF::String() const
     90 {
     91     return m_private;
     92 }
     93 
     94 WebDOMString::WebDOMString(const WTF::AtomicString& s)
     95     : m_private(0)
     96 {
     97     assign(s.string());
     98 }
     99 
    100 WebDOMString& WebDOMString::operator=(const WTF::AtomicString& s)
    101 {
    102     assign(s.string());
    103     return *this;
    104 }
    105 
    106 WebDOMString::operator WTF::AtomicString() const
    107 {
    108     return WTF::AtomicString(static_cast<WTF::StringImpl *>(m_private));
    109 }
    110 
    111 bool WebDOMString::equals(const char* string) const
    112 {
    113     return WTF::equal(m_private, string);
    114 }
    115 
    116 void WebDOMString::assign(WebDOMStringPrivate* p)
    117 {
    118     // Take care to handle the case where m_private == p
    119     if (p)
    120         p->ref();
    121     if (m_private)
    122         m_private->deref();
    123     m_private = p;
    124 }
    125