当前位置: 首页>>代码示例>>C++>>正文


C++ leveldb::WriteBatch类代码示例

本文整理汇总了C++中leveldb::WriteBatch的典型用法代码示例。如果您正苦于以下问题:C++ WriteBatch类的具体用法?C++ WriteBatch怎么用?C++ WriteBatch使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。


在下文中一共展示了WriteBatch类的12个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: writeUsrDb

int IndexDbLevelDb::writeUsrDb(const map<string, SiMap>& usrFidMap, leveldb::DB* dbUsrDb, leveldb::WriteBatch& wb_usrdb, const string& dbName)
{
    // lookup map
    for(const auto& itr : usrFidMap) {
        const string& usr = itr.first;
        if(usr != "") {
            SiMap file_list_map = itr.second;
#ifdef USE_USR2FILE_TABLE2
            for(const auto& itr_str : file_list_map) {
                wb_usrdb.Put(dbName + "|" + usr + "|" + itr_str.first, "1");
            }
#else
            // check if already registered
            string value;
            int rv = dbRead(value, dbUsrDb, dbName + "|" + usr);
            if(rv == 0) {
                const string delim = ",";
                list<string> old_list;
                boost::split(old_list, value, boost::is_any_of(delim));
                for(const auto& itr_old : old_list) {
                    file_list_map[itr_old] = 0;
                }
            }
            string file_list_string = "";
            for(const auto& itr_str : file_list_map) {
                file_list_string.append(itr_str.first+",");
            }
            file_list_string = file_list_string.substr(0, file_list_string.size()-1);
            wb_usrdb.Put(dbName + "|" + usr, file_list_string);
#endif
        }
    }
    return 0;
}
开发者ID:katonori,项目名称:cxxtags,代码行数:34,代码来源:IndexDbLevelDb.cpp

示例2: remove_address

bool leveldb_chain_keeper::remove_address(leveldb::WriteBatch& batch,
    const script& output_script, const output_point& outpoint)
{
    payment_address address;
    if (!extract(address, output_script))
        return false;
    data_chunk raw_address = create_address_key(address);
    BITCOIN_ASSERT(!raw_address.empty());
    data_chunk outpoint_value = create_spent_key(outpoint);
    bool is_found = false;
    leveldb_iterator it(address_iterator(db_.addr, raw_address));
    for (; valid_address_iterator(it, raw_address); it->Next())
    {
        if (slice_to_output_point(it->value()) != outpoint)
            continue;
        // We found the address entry we were looking for.
        BITCOIN_ASSERT(!is_found);
        is_found = true;
        // Put changes into batch finally.
        batch.Delete(it->key());
        break;
    }
    BITCOIN_ASSERT(it->status().ok());
    if (!is_found)
        return false;
    return true;
}
开发者ID:bitkevin,项目名称:libbitcoin,代码行数:27,代码来源:leveldb_chain_keeper.cpp

示例3: mark_spent_outputs

bool mark_spent_outputs(leveldb::WriteBatch& spend_batch,
    const output_point& previous_output, const input_point& spent_inpoint)
{
    data_chunk spent_key = create_spent_key(previous_output),
        spend_value = create_spent_key(spent_inpoint);
    spend_batch.Put(slice(spent_key), slice(spend_value));
    return true;
}
开发者ID:kaostao,项目名称:libbitcoin,代码行数:8,代码来源:leveldb_common.cpp

示例4: seq_update

void c_seq::seq_update(leveldb::WriteBatch& bh)
{
	m_seq_head.s_uptime(time(0));
	m_seq_head.m_head.s_crc(c_crc::crc16(0, 
		(uint8*)&m_seq_head + sizeof(_zmsg_head), 
		sizeof(m_seq_head) - sizeof(_zmsg_head)));
	leveldb::Slice value( (const char*)&m_seq_head, sizeof(m_seq_head) );
	bh.Put(m_key, value);
}
开发者ID:Mignet,项目名称:zstorage,代码行数:9,代码来源:c_seq.cpp

示例5: remove_credit

bool remove_credit(leveldb::WriteBatch& batch,
    const transaction_output_type& output, const output_point& outpoint)
{
    payment_address address;
    // Not a Bitcoin address so skip this output.
    if (!extract(address, output.script))
        return true;
    data_chunk addr_key = create_address_key(address, outpoint);
    batch.Delete(slice(addr_key));
    return true;
}
开发者ID:RagnarDanneskjold,项目名称:libbitcoin,代码行数:11,代码来源:leveldb_chain_keeper.cpp

示例6: txSave

TxId DatabaseHelper::txSave(leveldb::WriteBatch& batch, const Hash256& txHash, const DbTransaction& dbTx)
{
	auto buffer = bufferTLS.get();
	if (buffer == NULL)
	{
		bufferTLS.reset(buffer = new std::string());
	}

	auto index = txGetOrCreateId(txHash);

	Serialize(*buffer, dbTx);

	char searchKey2[1 + sizeof(TxId)];
	searchKey2[0] = (uint8_t)DatabaseKeyHeader::Tx;
	*(TxId*) &searchKey2[1] = swapByteOrder(index);
	batch.Put(leveldb::Slice((const char*)searchKey2, sizeof(searchKey2)), *buffer);

	return index;
}
开发者ID:Bushstar,项目名称:bkchaind,代码行数:19,代码来源:Database.cpp

示例7: Put

			Status Put(const std::vector<std::pair<std::string, std::string>>& writes)
			{
				leveldb::WriteBatch batch;

				for (auto kv : writes)
				{
					batch.Put(kv.first, kv.second);
				}

				leveldb::Status s = db->Write(leveldb::WriteOptions(), &batch);

				if (s.ok())
				{
					return Status::OK();
				}

				return Status::NotFound();

			}
开发者ID:AndryLeon,项目名称:zsearch,代码行数:19,代码来源:KVStoreLevelDb.hpp

示例8: add_credit

bool add_credit(leveldb::WriteBatch& batch,
    const payment_address& address, uint64_t output_value,
    const output_point& outpoint, uint32_t block_height)
{
    data_chunk addr_key = create_address_key(address, outpoint);
    // outpoint, value, block_height
    data_chunk row_info(36 + 8 + 4);
    auto serial = make_serializer(row_info.begin());
    // outpoint
    serial.write_hash(outpoint.hash);
    serial.write_4_bytes(outpoint.index);
    // value
    serial.write_8_bytes(output_value);
    // block_height
    serial.write_4_bytes(block_height);
    BITCOIN_ASSERT(
        std::distance(row_info.begin(), serial.iterator()) == 36 + 8 + 4);
    batch.Put(slice(addr_key), slice(row_info));
    return true;
}
开发者ID:kaostao,项目名称:libbitcoin,代码行数:20,代码来源:leveldb_common.cpp

示例9: seq_set

void c_seq::seq_set(leveldb::WriteBatch& bh, leveldb::Slice& value)
{
	uint32 keyId = m_seq_head.g_index() + 1;

	m_seq_head.s_index(keyId);
	m_seq_head.s_count(m_seq_head.g_count() + 1);

	_zmsg_head head;
	head.type = T_SEQ_VALUE;
	head.s_effective(time(0));
	head.s_crc(c_crc::crc16(0, (uint8*)value.data(), value.size()));

	memcpy(TSEQ_BUF(), &head, sizeof(_zmsg_head));
	memcpy(TSEQ_BUF() + sizeof(_zmsg_head), (void*)value.data(), value.size());
	int len = sizeof(_zmsg_head) + value.size();
	if (len > 0)
	{
		leveldb::Slice data(TSEQ_BUF(), len);
		bh.Put(__tos(m_key << "@" << keyId), data);
	}
}
开发者ID:Mignet,项目名称:zstorage,代码行数:21,代码来源:c_seq.cpp

示例10: add_debit

bool add_debit(leveldb::WriteBatch& batch,
    const transaction_input_type& input, const input_point& inpoint,
    uint32_t block_height)
{
    payment_address address;
    // Not a Bitcoin address so skip this output.
    if (!extract(address, input.script))
        return true;
    data_chunk addr_key = create_address_key(address, input.previous_output);
    // inpoint
    data_chunk row_info(36 + 4);
    auto serial = make_serializer(row_info.begin());
    // inpoint
    serial.write_hash(inpoint.hash);
    serial.write_4_bytes(inpoint.index);
    // block_height
    serial.write_4_bytes(block_height);
    BITCOIN_ASSERT(
        std::distance(row_info.begin(), serial.iterator()) == 36 + 4);
    batch.Put(slice(addr_key), slice(row_info));
    return true;
}
开发者ID:kaostao,项目名称:libbitcoin,代码行数:22,代码来源:leveldb_common.cpp

示例11: seq_del

void c_seq::seq_del(uint32 keyId, leveldb::WriteBatch& bh)
{
	bh.Delete(__tos(m_key << "@" << keyId));
	m_seq_head.s_count(m_seq_head.g_count() - 1);
	//LOG4_ERROR("SEQ DEL KEY:" << __tos(m_key << "@" << keyId));
}
开发者ID:Mignet,项目名称:zstorage,代码行数:6,代码来源:c_seq.cpp

示例12: Clear

					void Clear()
					{
						batch.Clear();
						count = 0;
					}
开发者ID:Ivasek,项目名称:ardb,代码行数:5,代码来源:leveldb_engine.hpp


注:本文中的leveldb::WriteBatch类示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。