10225501448 李度 10225101546 陈胤遒 10215501422 高宇菲
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 

56 行
1.4 KiB

#ifndef STORAGE_LEVELDB_UTIL_SERIALIZE_VALUE_H_
#define STORAGE_LEVELDB_UTIL_SERIALIZE_VALUE_H_
#include <iostream>
#include <string>
#include <vector>
#include <map>
#include "leveldb/slice.h"
#include "util/coding.h"
namespace leveldb{
using Field = std::pair<std::string, std::string>; // field_name:field_value
using FieldArray = std::vector<std::pair<std::string, std::string>>;
std::string SerializeValue(const FieldArray& fields);
FieldArray *ParseValue(const std::string& value_str);
class InternalFieldArray {
public:
using FieldMap = std::map<std::string,std::string>;
InternalFieldArray(const FieldArray &fields, bool to_map = false):fields(fields),isMapped(false) {
if(to_map) Map();
}
InternalFieldArray(const std::string& value_str) {
Slice valueSlice(value_str);
Slice nameSlice,valSlice;
while(GetLengthPrefixedSlice(&valueSlice, &nameSlice)) {
if(GetLengthPrefixedSlice(&valueSlice, &valueSlice)) {
map[nameSlice.ToString()] = valueSlice.ToString();
} else {
std::cout << "name and val not match!" << std::endl;
}
nameSlice.clear();
valSlice.clear();
}
}
InternalFieldArray(const Slice& slice):leveldb::InternalFieldArray(slice.ToString()) {}
//将vector变为用map存
void Map();
std::string Serialize();
bool HasField(const Field& field);
private:
bool isMapped;
const FieldArray fields;
FieldMap map;
};
}
#endif