소스 검색

多字段-SerializeValue,ParseValue

master
陈予曈 8 달 전
부모
커밋
e20d55ebea
1개의 변경된 파일56개의 추가작업 그리고 0개의 파일을 삭제
  1. +56
    -0
      db/NewDB.cc

+ 56
- 0
db/NewDB.cc 파일 보기

@ -19,6 +19,62 @@ NewDB::~NewDB() {
}
std::string NewDB::SerializeValue(const FieldArray& fields){
std::string value_str;
for(const auto& pair : fields){
std::string field = pair.first + ":" + pair.second;
uint32_t field_size = field.size();
char buffer[4];
EncodeFixed32(buffer, field_size);
value_str.append(buffer, 4);
value_str.append(field);
}
return value_str;
// std::string s;
// for(auto& field : fields){
// PutLengthPrefixedSlice(&s, Slice(field.first));
// PutLengthPrefixedSlice(&s, Slice(field.second));
// }
// return s;
}
FieldArray NewDB::ParseValue(const std::string& value_str){
FieldArray fields;
const char* data = value_str.data();
size_t length = value_str.size();
while (length >= 4) {
uint32_t field_size = DecodeFixed32(data);
if (length < 4 + field_size) {
break;
}
std::string field(data + 4, field_size);
size_t colon_pos = field.find(':');
std::string field_name = field.substr(0, colon_pos);
std::string field_value = field.substr(colon_pos + 1);
fields.push_back(std::make_pair(field_name,field_value));
data += 4 + field_size;
length -= 4 + field_size;
}
return fields;
// Slice input(value_str);
// Slice v1,v2;
// FieldArray fields;
// while(v1!=Slice()){
// GetLengthPrefixedSlice(&input, &v1);
// GetLengthPrefixedSlice(&input, &v2);
// fields.push_back(std::make_pair(v1.ToString(), v2.ToString()));
// }
// return fields;
}
Status NewDB::Open(const Options& options, const std::string& name, NewDB** dbptr) {
}

불러오는 중...
취소
저장