~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/name_map.h

Merge trunk and resolve all conflicts.

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
18
18
 */
19
19
 
20
 
#ifndef DRIZZLED_REGISTRY_H
21
 
#define DRIZZLED_REGISTRY_H
 
20
#ifndef DRIZZLED_NAME_MAP_H
 
21
#define DRIZZLED_NAME_MAP_H
22
22
 
23
23
#include <map>
24
24
#include <set>
32
32
namespace internal {
33
33
 
34
34
template<class T>
35
 
struct RegistryMapCompare
 
35
struct NameMapCompare
36
36
{
37
37
  bool operator() (const T& a, const T& b) const
38
38
  {
41
41
};
42
42
 
43
43
template<class T>
44
 
struct RegistryMapCompare<T *>
 
44
struct NameMapCompare<T *>
45
45
{
46
46
  bool operator() (const T* a, const T* b) const
47
47
  {
52
52
} /* namespace internal */
53
53
 
54
54
template<class T>
55
 
class Registry
 
55
class NameMap
56
56
{
57
57
  std::map<std::string, T> item_map;
58
 
  std::set<T,internal::RegistryMapCompare<T> > item_set;
 
58
  std::set<T,internal::NameMapCompare<T> > item_set;
59
59
 
60
60
  bool addItemEntry(std::string name, T item)
61
61
  {
75
75
      return true;
76
76
 
77
77
    /* Transform to lower, then add */ 
78
 
    transform(name.begin(), name.end(),
79
 
              name.begin(), ::tolower);
 
78
    std::transform(name.begin(), name.end(),
 
79
                   name.begin(), ::tolower);
80
80
 
81
81
    /* Ignore failures here - the original name could be all lower */
82
82
    addItemEntry(name, item);
83
83
 
84
84
    /* Transform to upper, then add */ 
85
 
    transform(name.begin(), name.end(),
86
 
              name.begin(), ::toupper);
 
85
    std::transform(name.begin(), name.end(),
 
86
                   name.begin(), ::toupper);
87
87
 
88
88
    /* Ignore failures here - the original name could be all upper */
89
89
    addItemEntry(name, item);
98
98
    item_map.erase(name);
99
99
 
100
100
    /* Transform to lower, then remove */ 
101
 
    transform(name.begin(), name.end(),
102
 
              name.begin(), ::tolower);
 
101
    std::transform(name.begin(), name.end(),
 
102
                   name.begin(), ::tolower);
103
103
    item_map.erase(name);
104
104
  }
105
105
 
125
125
    
126
126
    /* We must look for lower case, so we make a copy of the input name */
127
127
    std::string lower_name(name);
128
 
    transform(lower_name.begin(), lower_name.end(),
129
 
              lower_name.begin(), ::tolower);
 
128
    std::transform(lower_name.begin(), lower_name.end(),
 
129
                   lower_name.begin(), ::tolower);
130
130
    find_iter=  item_map.find(lower_name);
131
131
    if (find_iter != item_map.end())
132
132
      return (*find_iter).second;
196
196
  size_type count(std::string name) const
197
197
  {
198
198
    /* Transform to lower, then add */
199
 
    transform(name.begin(), name.end(),
200
 
              name.begin(), ::tolower);
 
199
    std::transform(name.begin(), name.end(),
 
200
                   name.begin(), ::tolower);
201
201
    return item_map.count(name);
202
202
  }
203
203
 
209
209
 
210
210
} /* namespace drizzled */
211
211
 
212
 
#endif /* DRIZZLED_REGISTRY_H */
 
212
#endif /* DRIZZLED_NAME_MAP_H */
213
213