#include <vector>
#include <algorithm>
+#include "common/strtol.h"
#include "ErasureCode.h"
int ErasureCode::minimum_to_decode(const set<int> &want_to_read,
assert("ErasureCode::decode_chunks not implemented" == 0);
}
+int ErasureCode::to_int(const std::string &name,
+ const map<std::string,std::string> ¶meters,
+ int *value,
+ int default_value,
+ ostream *ss)
+{
+ if (parameters.find(name) == parameters.end() ||
+ parameters.find(name)->second.size() == 0) {
+ *value = default_value;
+ return 0;
+ }
+ std::string p = parameters.find(name)->second;
+ std::string err;
+ int r = strict_strtol(p.c_str(), 10, &err);
+ if (!err.empty()) {
+ *ss << "could not convert " << name << "=" << p
+ << " to int because " << err
+ << ", set to default " << default_value << std::endl;
+ *value = default_value;
+ return -EINVAL;
+ }
+ *value = r;
+ return 0;
+}
+int ErasureCode::to_bool(const std::string &name,
+ const map<std::string,std::string> ¶meters,
+ bool *value,
+ bool default_value,
+ ostream *ss)
+{
+ if (parameters.find(name) == parameters.end() ||
+ parameters.find(name)->second.size() == 0) {
+ *value = default_value;
+ return 0;
+ }
+ const std::string p = parameters.find(name)->second;
+ *value = (p == "yes") || (p == "true");
+ return 0;
+}
const map<int, bufferlist> &chunks,
map<int, bufferlist> *decoded);
+ static int to_int(const std::string &name,
+ const map<std::string,std::string> ¶meters,
+ int *value,
+ int default_value,
+ ostream *ss);
+
+ static int to_bool(const std::string &name,
+ const map<std::string,std::string> ¶meters,
+ bool *value,
+ bool default_value,
+ ostream *ss);
};
}
// -----------------------------------------------------------------------------
-int
-ErasureCodeIsa::to_int(const std::string &name,
- const map<std::string, std::string> ¶meters,
- int default_value)
-{
- if (parameters.find(name) == parameters.end() ||
- parameters.find(name)->second.size() == 0) {
- dout(10) << name << " defaults to " << default_value << dendl;
- return default_value;
- }
- const std::string value = parameters.find(name)->second;
- std::string p = value;
- std::string err;
- int r = strict_strtol(p.c_str(), 10, &err);
- if (!err.empty()) {
- derr << "could not convert " << name << "=" << value
- << " to int because " << err
- << ", set to default " << default_value << dendl;
- return default_value;
- }
- dout(10) << name << " set to " << r << dendl;
- return r;
-}
-
-// -----------------------------------------------------------------------------
-
void
ErasureCodeIsaDefault::isa_encode(char **data,
char **coding,
virtual void prepare() = 0;
- static int to_int(const std::string &name,
- const map<std::string, std::string> ¶meters,
- int default_value);
};
// -----------------------------------------------------------------------------
return jerasure_decode(erasures, data, coding, blocksize);
}
-int ErasureCodeJerasure::to_int(const std::string &name,
- const map<std::string,std::string> ¶meters,
- int default_value)
-{
- if (parameters.find(name) == parameters.end() ||
- parameters.find(name)->second.size() == 0) {
- dout(10) << name << " defaults to " << default_value << dendl;
- return default_value;
- }
- const std::string value = parameters.find(name)->second;
- std::string p = value;
- std::string err;
- int r = strict_strtol(p.c_str(), 10, &err);
- if (!err.empty()) {
- derr << "could not convert " << name << "=" << value
- << " to int because " << err
- << ", set to default " << default_value << dendl;
- return default_value;
- }
- dout(10) << name << " set to " << r << dendl;
- return r;
-}
-
-bool ErasureCodeJerasure::to_bool(const std::string &name,
- const map<std::string,std::string> ¶meters,
- bool default_value)
-{
- if (parameters.find(name) == parameters.end() ||
- parameters.find(name)->second.size() == 0) {
- dout(10) << name << " defaults to " << default_value << dendl;
- return default_value;
- }
- const std::string value = parameters.find(name)->second;
- return (value == "yes") || (value == "1") || (value == "true");
-}
-
bool ErasureCodeJerasure::is_prime(int value)
{
int prime55[] = {
virtual unsigned get_alignment() const = 0;
virtual void parse(const map<std::string,std::string> ¶meters) = 0;
virtual void prepare() = 0;
- static int to_int(const std::string &name,
- const map<std::string,std::string> ¶meters,
- int default_value);
- static bool to_bool(const std::string &name,
- const map<std::string,std::string> ¶meters,
- bool default_value);
static bool is_prime(int value);
};