33
33
Some sections of this code came from the Boost examples.
36
#ifndef DRIZZLED_UTIL_STRING_H
37
#define DRIZZLED_UTIL_STRING_H
42
43
#include <boost/algorithm/string/predicate.hpp>
43
#include <boost/foreach.hpp>
44
44
#include <boost/functional/hash.hpp>
45
45
#include <boost/shared_ptr.hpp>
47
#define drizzle_literal_parameter(X) (X), size_t((sizeof(X) - 1))
55
typedef boost::shared_ptr<std::string> shared_ptr;
56
typedef boost::shared_ptr<const std::string> const_shared_ptr;
57
typedef std::vector< std::string > vector;
52
60
struct insensitive_equal_to : std::binary_function<std::string, std::string, bool>
54
62
bool operator()(std::string const& x, std::string const& y) const
56
return boost::algorithm::iequals(x, y);
64
return boost::algorithm::iequals(x, y, std::locale());
62
70
std::size_t operator()(std::string const& x) const
64
72
std::size_t seed = 0;
65
BOOST_FOREACH(std::string::const_reference it, x)
66
boost::hash_combine(seed, std::toupper(it));
75
for(std::string::const_iterator it = x.begin(); it != x.end(); ++it)
77
boost::hash_combine(seed, std::toupper(*it, locale));
73
86
std::size_t operator()(std::vector<char> const& x) const
75
88
std::size_t seed = 0;
76
BOOST_FOREACH(std::vector<char>::const_reference it, x)
77
boost::hash_combine(seed, it);
90
for(std::vector<char>::const_iterator it = x.begin(); it != x.end(); ++it)
92
boost::hash_combine(seed, *it);
91
const char* data() const
101
void assign(const size_t repeat, const char arg)
103
_bytes.resize(repeat + 1); // inserts \0 at end
104
memset(&_bytes[0], arg, repeat);
108
void assign(const char *arg, const size_t arg_size)
110
_bytes.resize(arg_size + 1); // +1 for \0
111
memcpy(&_bytes[0], arg, arg_size);
115
void append(const char *arg, const size_t arg_size)
117
if (not arg or not arg_size)
120
size_t original_size= size();
123
_bytes.resize(original_size + arg_size + 1); // inserts NULL since string will already have a NULL
124
memcpy(&_bytes[original_size], arg, arg_size);
125
_bytes[original_size + arg_size]= 0;
129
assign(arg, arg_size);
133
const char& operator[] (size_t arg) const
138
char& operator[] (size_t arg)
151
return _bytes.size() -1;
155
std::vector<char> _bytes;
158
99
} /* namespace util */
159
100
} /* namespace drizzled */
102
#endif /* DRIZZLED_UTIL_STRING_H */