#include <exceptions/BucketRecordCorruptedException.h>
#include <storage/BucketDeserializer.h>
+#include <storage/StorageDeserializer.h>
#include <storage/StorageSerializer.h>
#include <types/Policy.h>
try {
std::size_t beginToken = 0;
auto policyKey = parseKey(line, beginToken);
- auto policyType = parsePolicyType(line, beginToken);
- auto metadata = parseMetadata(line, beginToken);
+ auto policyType = StorageDeserializer::parsePolicyType(line, beginToken);
+ auto metadata = StorageDeserializer::parseMetadata(line, beginToken);
PolicyResult policyResult(policyType, metadata);
policies.push_back(std::make_shared<Policy>(policyKey, policyResult));
} catch (const BucketRecordCorruptedException &ex) {
return PolicyKey(keyFeatures[0], keyFeatures[1], keyFeatures[2]);
}
-PolicyType BucketDeserializer::parsePolicyType(const std::string &line, std::size_t &beginToken) {
- PolicyType policyType;
- try {
- size_t newBegin = 0;
- policyType = std::stoi(line.substr(beginToken), &newBegin, 16);
- beginToken += newBegin;
- } catch(...) {
- throw BucketRecordCorruptedException(line);
- }
-
- return policyType;
-}
-
-PolicyResult::PolicyMetadata BucketDeserializer::parseMetadata(const std::string &line,
- std::size_t &beginToken) {
- if (beginToken < line.size()) {
- auto ret = line.substr(beginToken + 1);
- beginToken = line.size();
- return ret;
- }
-
- return std::string();
-}
-
} /* namespace Cynara */
namespace Cynara {
-class StorageDeserializer;
-
class BucketDeserializer {
-friend StorageDeserializer;
public:
BucketDeserializer(std::istream &inStream) : m_inStream(inStream) {}
protected:
static PolicyKey parseKey(const std::string &line, std::size_t &beginToken);
- static PolicyType parsePolicyType(const std::string &line, std::size_t &beginToken);
- static PolicyResult::PolicyMetadata parseMetadata(const std::string &line,
- std::size_t &beginToken);
private:
std::istream &m_inStream;
if (line.empty())
break;
- size_t beginToken = 0;
- auto bucketId = StorageDeserializer::parseBucketId(line, beginToken);
- auto policyType = BucketDeserializer::parsePolicyType(line, beginToken);
- auto metadata = BucketDeserializer::parseMetadata(line, beginToken);
+ std::size_t beginToken = 0;
+ auto bucketId = parseBucketId(line, beginToken);
+ auto policyType = parsePolicyType(line, beginToken);
+ auto metadata = parseMetadata(line, beginToken);
buckets[bucketId] = PolicyBucket(bucketId, PolicyResult(policyType, metadata));
}
throw BucketRecordCorruptedException(line);
}
+PolicyType StorageDeserializer::parsePolicyType(const std::string &line, std::size_t &beginToken) {
+ PolicyType policyType;
+ try {
+ std::size_t newBegin = 0;
+ policyType = std::stoi(line.substr(beginToken), &newBegin, 16);
+ beginToken += newBegin;
+ } catch(...) {
+ throw BucketRecordCorruptedException(line);
+ }
+
+ return policyType;
+}
+
+PolicyResult::PolicyMetadata StorageDeserializer::parseMetadata(const std::string &line,
+ std::size_t &beginToken) {
+ if (beginToken < line.size()) {
+ auto ret = line.substr(beginToken + 1);
+ beginToken = line.size();
+ return ret;
+ }
+
+ return std::string();
+}
+
} /* namespace Cynara */
void initBuckets(InMemoryStorageBackend::Buckets &buckets);
void loadBuckets(InMemoryStorageBackend::Buckets &buckets);
-protected:
static PolicyBucketId parseBucketId(const std::string &line, std::size_t &beginToken);
+ static PolicyType parsePolicyType(const std::string &line, std::size_t &beginToken);
+ static PolicyResult::PolicyMetadata parseMetadata(const std::string &line,
+ std::size_t &beginToken);
private:
std::istream &m_inStream;