#include "python.h" namespace python { int String::capacity() const { return max_size(); } String::String (PyObject *pyob, bool owned): SeqBase(pyob, owned) { validate(); } String::String (const Object& ob): SeqBase(ob) { validate(); } String::String() : SeqBase( PyString_FromStringAndSize( "", 0 ), true ) { validate(); } String::String (const std::string& v ) : SeqBase( PyString_FromStringAndSize( const_cast(v.data()), v.length() ), true ) { validate(); } String::String (const std::string& v, std::string::size_type vsize) :SeqBase(PyString_FromStringAndSize( const_cast(v.data()), vsize), true) { validate(); } String::String (const char *v, int vsize) :SeqBase(PyString_FromStringAndSize (const_cast(v), vsize), true) { validate(); } String::String (const char* v) :SeqBase(PyString_FromString (v), true) { validate(); } // Assignment acquires new ownership of pointer String& String::operator= (const Object& rhs) { return (*this = *rhs); } String& String::operator= (PyObject* rhsp) { if(ptr() == rhsp) return *this; set (rhsp); return *this; } // Membership bool String::accepts (PyObject *pyob) const { return pyob && PyString_Check (pyob); } // Assignment from C string String& String::operator= (const std::string& v) { set(PyString_FromStringAndSize (const_cast(v.data()), v.length() ), true); return *this; } // // Queries int String::size () const { return PyString_Size (ptr()); } String::operator std::string () const { return std::string( PyString_AsString( ptr() ), PyString_Size( ptr() ) ); } std::string String::as_std_string() const { return std::string( PyString_AsString( ptr() ), PyString_Size( ptr() ) ); } }