00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
#include "pqxx/libcompiler.h"
00019 
00020 
#include <string>
00021 
00022 
#include "pqxx/result"
00023 
00024 
00025 namespace pqxx
00026 {
00027 
00029 
00041 class PQXX_LIBEXPORT binarystring : internal::PQAlloc<unsigned char>
00042 {
00043   
00044 
public:
00045   typedef content_type 
char_type;
00046   typedef PGSTD::char_traits<char_type>::char_type value_type;
00047   typedef size_t 
size_type;
00048   typedef ptrdiff_t difference_type;
00049   typedef const value_type &
const_reference;
00050   typedef const value_type *
const_pointer;
00051   typedef const_pointer const_iterator;
00052 
00053 
#ifdef PQXX_HAVE_REVERSE_ITERATOR
00054 
  typedef PGSTD::reverse_iterator<const_iterator> const_reverse_iterator;
00055 
#endif
00056 
00057 
private:
00058   
typedef internal::PQAlloc<value_type> super;
00059 
00060 
public:
00062 
00065   
explicit binarystring(
const result::field &F);                        
00066 
00068   size_type size() const throw () { 
return m_size; }                    
00069   size_type length() const throw () { 
return size(); }                  
00070   bool empty() const throw () { 
return size()==0; }                     
00071 
00072   const_iterator begin() const throw () { 
return data(); }              
00073   const_iterator end() const throw () { 
return data()+m_size; }         
00074 
00075 
#ifdef PQXX_HAVE_REVERSE_ITERATOR
00076 
  const_reverse_iterator rbegin() const                                 
00077         { 
return const_reverse_iterator(end()); }
00078   const_reverse_iterator rend() const                                   
00079         { 
return const_reverse_iterator(begin()); }
00080 
#endif
00081 
00083   const value_type *data() const throw () {
return super::c_ptr();}      
00084 
00085   const_reference operator[](
size_type i) 
const throw ()                
00086         { 
return data()[i]; }
00087 
00089   const_reference at(size_type) const;                                  
00090 
00092 
00095   const 
char *c_ptr() const throw ()                                    
00096   {
00097     
return reinterpret_cast<char *>(super::c_ptr());
00098   }
00099 
00101 
00103   
const PGSTD::string &str() const;                                     
00104 
00105 private:
00106   size_type m_size;
00107   mutable PGSTD::string m_str;
00108 };
00109 
00110 
00112 PGSTD::string PQXX_LIBEXPORT escape_binary(const PGSTD::string &bin);
00114 PGSTD::string PQXX_LIBEXPORT escape_binary(const 
char bin[]);
00116 PGSTD::string PQXX_LIBEXPORT escape_binary(const 
char bin[], size_t len);
00118 PGSTD::string PQXX_LIBEXPORT escape_binary(const 
unsigned char bin[]);
00120 PGSTD::string PQXX_LIBEXPORT escape_binary(const 
unsigned char bin[], size_t len);
00121 
00122 
00123 }
00124