| 231 | |
| 232 | template <typename K, typename T> |
| 233 | bool Write(const K& key, const T& value, bool fOverwrite = true) |
| 234 | { |
| 235 | if (!pdb) |
| 236 | return true; |
| 237 | if (fReadOnly) |
| 238 | assert(!"Write called on database in read-only mode"); |
| 239 | |
| 240 | // Key |
| 241 | CDataStream ssKey(SER_DISK, CLIENT_VERSION); |
| 242 | ssKey.reserve(1000); |
| 243 | ssKey << key; |
| 244 | Dbt datKey(ssKey.data(), ssKey.size()); |
| 245 | |
| 246 | // Value |
| 247 | CDataStream ssValue(SER_DISK, CLIENT_VERSION); |
| 248 | ssValue.reserve(10000); |
| 249 | ssValue << value; |
| 250 | Dbt datValue(ssValue.data(), ssValue.size()); |
| 251 | |
| 252 | // Write |
| 253 | int ret = pdb->put(activeTxn, &datKey, &datValue, (fOverwrite ? 0 : DB_NOOVERWRITE)); |
| 254 | |
| 255 | // Clear memory in case it was a private key |
| 256 | memory_cleanse(datKey.get_data(), datKey.get_size()); |
| 257 | memory_cleanse(datValue.get_data(), datValue.get_size()); |
| 258 | return (ret == 0); |
| 259 | } |
| 260 | |
| 261 | template <typename K> |
| 262 | bool Erase(const K& key) |
no test coverage detected