binarystring.hxx
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef PQXX_H_BINARYSTRING
00019 #define PQXX_H_BINARYSTRING
00020
00021 #include "pqxx/compiler-public.hxx"
00022 #include "pqxx/compiler-internal-pre.hxx"
00023
00024 #include <string>
00025
00026 #include "pqxx/result"
00027
00028
00029 namespace pqxx
00030 {
00031
00033
00060 class PQXX_LIBEXPORT binarystring : internal::PQAlloc<unsigned char>
00061 {
00062
00063 public:
00064 typedef content_type char_type;
00065 typedef PGSTD::char_traits<char_type>::char_type value_type;
00066 typedef size_t size_type;
00067 typedef long difference_type;
00068 typedef const value_type &const_reference;
00069 typedef const value_type *const_pointer;
00070 typedef const_pointer const_iterator;
00071
00072 #ifdef PQXX_HAVE_REVERSE_ITERATOR
00073 typedef PGSTD::reverse_iterator<const_iterator> const_reverse_iterator;
00074 #endif
00075
00076 private:
00077 typedef internal::PQAlloc<value_type> super;
00078
00079 public:
00081
00084 explicit binarystring(const result::field &F);
00085
00087 size_type size() const throw () { return m_size; }
00089 size_type length() const throw () { return size(); }
00090 bool empty() const throw () { return size()==0; }
00091
00092 const_iterator begin() const throw () { return data(); }
00093 const_iterator end() const throw () { return data()+m_size; }
00094
00095 const_reference front() const throw () { return *begin(); }
00096 const_reference back() const throw () { return *(data()+m_size-1); }
00097
00098 #ifdef PQXX_HAVE_REVERSE_ITERATOR
00099 const_reverse_iterator rbegin() const
00100 { return const_reverse_iterator(end()); }
00101 const_reverse_iterator rend() const
00102 { return const_reverse_iterator(begin()); }
00103 #endif
00104
00106 const value_type *data() const throw () {return super::c_ptr();}
00107
00108 const_reference operator[](size_type i) const throw ()
00109 { return data()[i]; }
00110
00111 bool operator==(const binarystring &) const throw ();
00112 bool operator!=(const binarystring &rhs) const throw ()
00113 { return !operator==(rhs); }
00114
00116 const_reference at(size_type) const;
00117
00119 void swap(binarystring &);
00120
00122
00125 const char *c_ptr() const throw ()
00126 {
00127 return reinterpret_cast<char *>(super::c_ptr());
00128 }
00129
00131
00138 const PGSTD::string &str() const;
00139
00140 private:
00141 size_type m_size;
00142 mutable PGSTD::string m_str;
00143 };
00144
00145
00152
00153
00157 PGSTD::string PQXX_LIBEXPORT escape_binary(const PGSTD::string &bin);
00159
00163 PGSTD::string PQXX_LIBEXPORT escape_binary(const char bin[]);
00165
00169 PGSTD::string PQXX_LIBEXPORT escape_binary(const char bin[], size_t len);
00171
00175 PGSTD::string PQXX_LIBEXPORT escape_binary(const unsigned char bin[]);
00177
00181 PGSTD::string PQXX_LIBEXPORT escape_binary(const unsigned char bin[], size_t len);
00182
00188 }
00189
00190 #include "pqxx/compiler-internal-post.hxx"
00191
00192 #endif
00193