QDP++
qdp_map_obj_disk_multiple.h
Go to the documentation of this file.
1// -*- C++ -*-
5
6
7#ifndef __qdp_map_obj_disk_multiple_h__
8#define __qdp_map_obj_disk_multiple_h__
9
10#include "qdp_map_obj_disk.h"
11#include <vector>
12
13namespace QDP
14{
15
16 //----------------------------------------------------------------------------
18 template<typename K, typename V>
20 {
21 public:
24
27
29 void setDebug(int level)
30 {
31 for(int i=0; i < dbs_.size(); ++i)
32 dbs_[i]->setDebug(level);
33 }
34
36 int getDebug() const {return dbs_[0]->getDebug();}
37
39 void open(const std::vector<std::string>& files)
40 {
41 dbs_.resize(files.size());
42
43 for(int i=0; i < dbs_.size(); ++i)
44 {
45 dbs_[i] = new MapObjectDisk<K,V>();
46 dbs_[i]->open(files[i], std::ios_base::in);
47 }
48 }
49
50
52 bool fileExists(const std::vector<std::string>& files) const
53 {
54 bool ret = true;
55 for(int i=0; i < dbs_.size(); ++i)
56 {
57 ret = dbs_[i]->fileExists(files[i]);
58 if (! ret)
59 return ret;
60 }
61
62 return ret;
63 }
64
65
67 void close()
68 {
69 for(int i=0; i < dbs_.size(); ++i)
70 {
71 dbs_[i]->close();
72 delete dbs_[i];
73 }
74 }
75
76
83 int get(const K& key, V& val) const
84 {
85 int ret = -1;
86
87 for(int i=0; i < dbs_.size(); ++i)
88 {
89 ret = dbs_[i]->get(key, val);
90 if (ret == 0)
91 break;
92 }
93 return ret;
94 }
95
96
102 void keys(std::vector<K>& keys_) const {
103 keys_.clear();
104
105 std::unordered_map<std::string,int> unique_it;
106
107 for(int i=0; i < dbs_.size(); ++i)
108 {
109 std::vector<K> kk;
110 dbs_[i]->keys(kk);
111
112 for(typename std::vector<K>::const_iterator k=kk.begin(); k != kk.end(); ++k)
113 {
115 write(bin, *k);
116
117 unique_it.insert(std::make_pair(bin.str(),1));
118 }
119 }
120
121 for(typename std::unordered_map<std::string,int>::const_iterator k=unique_it.begin(); k != unique_it.end(); ++k)
122 {
123 BinaryBufferReader bin(k->first);
124 K key;
125 read(bin, key);
126 keys_.push_back(key);
127 }
128 }
129
133 void flush()
134 {
135 for(int i=0; i < dbs_.size(); ++i)
136 {
137 dbs_[i]->flush();
138 }
139 }
140
141
147 bool exist(const K& key) const
148 {
149 bool ret = false;
150
151 for(int i=0; i < dbs_.size(); ++i)
152 {
153 ret = dbs_[i]->exist(key);
154 if (ret)
155 break;
156 }
157
158 return ret;
159 }
160
167 int getUserdata(std::string& user_data) const
168 {
169 int ret = -1;
170
171 if (dbs_.size() == 0)
172 return ret;
173
174 // Grab the first db
175 ret = dbs_[0]->getUserdata(user_data);
176
177 return ret;
178 }
179
180 private:
183
185 void operator=(const MapObjectDiskMultiple&) {}
186
187 private:
189 std::vector< MapObjectDisk<K,V>* > dbs_;
190 };
191
192} // namespace Chroma
193
194#endif
Binary buffer input class.
Definition qdp_io.h:905
Binary buffer output class.
Definition qdp_io.h:1390
std::string str() const
Return entire buffer as a string.
Definition qdp_io.cc:1372
Class that holds multiple DBs. Can only be used in a read-only mode.
void open(const std::vector< std::string > &files)
Open files.
int getDebug() const
Get debugging level.
void keys(std::vector< K > &keys_) const
int get(const K &key, V &val) const
void setDebug(int level)
Set debugging level.
int getUserdata(std::string &user_data) const
bool fileExists(const std::vector< std::string > &files) const
Check if a DB file exists before opening.
A wrapper over maps.
void write(BinaryWriter &bin, const std::string &output)
Definition qdp_io.cc:1204
void read(BinaryReader &bin, std::string &input, size_t maxBytes)
Definition qdp_io.cc:778
Yet another random number generator.
A Map Object that works lazily from Disk.