コード例 #1
0
ファイル: node.cpp プロジェクト: jameswei/cascadb
bool InnerNode::read_from(BlockReader& reader, bool skeleton_only)
{
    if (!reader.readBool(&bottom_)) return false;

    uint32_t pn;
    if (!reader.readUInt32(&pn)) return false;

    pivots_.resize(pn);

    if (!reader.readUInt64(&first_child_)) return false;
    if (!reader.readUInt32(&first_msgbuf_offset_)) return false;
    if (!reader.readUInt32(&first_msgbuf_length_)) return false;
    if (!reader.readUInt32(&first_msgbuf_uncompressed_length_)) return false;

    for (size_t i = 0; i < pn; i++) {
        if (!reader.readSlice(pivots_[i].key)) return false;
        pivots_sz_ += pivot_size(pivots_[i].key);
        if (!reader.readUInt64(&(pivots_[i].child))) return false;
        pivots_[i].msgbuf = NULL; // unloaded
        if (!reader.readUInt32(&(pivots_[i].offset))) return false;
        if (!reader.readUInt32(&(pivots_[i].length))) return false;
        if (!reader.readUInt32(&(pivots_[i].uncompressed_length))) return false;
    }

    if (!skeleton_only) {
        if (!load_all_msgbuf(reader)) return false;
    } else {
        status_ = kSkeletonLoaded;
    }

    return true;
}
コード例 #2
0
ファイル: layout.cpp プロジェクト: jameswei/cascadb
bool Layout::read_block_meta(BlockMeta* meta, BlockReader& reader)
{
    if (!reader.readUInt64(&(meta->offset))) return false;
    if (!reader.readUInt32(&(meta->skeleton_size))) return false;
    if (!reader.readUInt32(&(meta->total_size))) return false;
    if (!reader.readUInt16(&(meta->crc))) return false;
    return true;
}
コード例 #3
0
ファイル: node.cpp プロジェクト: jameswei/cascadb
bool LeafNode::read_buckets_info(BlockReader& reader)
{
    uint32_t nbuckets;
    if (!reader.readUInt32(&nbuckets)) return false;
    buckets_info_.resize(nbuckets);

    buckets_info_size_ = 4;
    for (size_t i = 0; i < nbuckets; i++ ) {
        if (!reader.readSlice(buckets_info_[i].key)) return false;
        if (!reader.readUInt32(&(buckets_info_[i].offset))) return false;
        if (!reader.readUInt32(&(buckets_info_[i].length))) return false;
        if (!reader.readUInt32(&(buckets_info_[i].uncompressed_length))) return false;
        buckets_info_size_ += 4 + buckets_info_[i].key.size() + 4 + 4 + 4;
    }

    // init buckets number
    records_.set_buckets_number(nbuckets);

    status_ = kSkeletonLoaded;
    return true;
}
コード例 #4
0
ファイル: node.cpp プロジェクト: jameswei/cascadb
bool LeafNode::read_bucket(BlockReader& reader,
                           RecordBucket *bucket)
{
    uint32_t nrecords;
    if (!reader.readUInt32(&nrecords)) return false;

    bucket->resize(nrecords);
    for (size_t i = 0; i < nrecords; i++) {
        if (!(*bucket)[i].read_from(reader)) {
            return false;
        }
    }

    return true;
}
コード例 #5
0
ファイル: msg.cpp プロジェクト: MissGentoo/cascadb
bool MsgBuf::read_from(BlockReader& reader)
{
    uint32_t cnt = 0;
    if (!reader.readUInt32(&cnt)) return false;
    // container_.resize(cnt);
    // for (size_t i = 0; i < cnt; i++ ) {
    //     if (!container_[i].read_from(reader)) return false;
    //     size_ += container_[i].size();
    // }
    for (size_t i = 0; i < cnt; i++ ) {
        Msg msg;
        if (!msg.read_from(reader)) return false;
        size_ += msg.size();
        container_.push_back(msg);
    }
    return true;
}
コード例 #6
0
ファイル: layout.cpp プロジェクト: wareseeker/wath
bool Layout::read_index(BlockReader& reader)
{
    ScopedMutex block_index_lock(&block_index_mtx_);
    assert(block_index_.size() == 0);

    uint32_t n;
    if (!reader.readUInt32(&n)) return false;
    for (uint32_t i = 0; i < n; i++ ) {
        bid_t bid;
        BlockMeta* meta = new BlockMeta();
        if (reader.readUInt64(&bid) && read_block_meta(meta, reader)) {
            block_index_[bid] = meta;
            continue;
        }
        delete meta;
        return false;
    }
    return true;
}