From e4cf0d04c4afff98603df440d12a4a19b3717a34 Mon Sep 17 00:00:00 2001 From: Dennis Brentjes Date: Fri, 18 Nov 2016 15:04:56 +0100 Subject: The Realtime precomputation step is now done on batch level. --- node/node.cpp | 61 ++++++++++++++++++++++++++++++++++++----------------------- 1 file changed, 37 insertions(+), 24 deletions(-) (limited to 'node/node.cpp') diff --git a/node/node.cpp b/node/node.cpp index b29a873..3ad4a2d 100644 --- a/node/node.cpp +++ b/node/node.cpp @@ -208,34 +208,47 @@ void Node::start_realtime_phase() { cmix_proto::RealPre realpre; size_t len = get_group_element_array_size(&cmix_ctx); - for(auto&& pair : index_map) { - realpre.add_h(); - realpre.add_m(); - realpre.mutable_m(pair.second)->resize(len); - std::decay::type::first_type const& handle = pair.first; - std::decay::type::second_type const& index = pair.second; + + std::vector ms(index_map.size(), nullptr); + std::vector msv(index_map.size(), nullptr); + std::vector keys(index_map.size(), nullptr); + auto it = index_map.begin(); + for(size_t i = 0; i < index_map.size(); ++i) { + auto handle = it->first; + auto index = it->second; + + std::string* m = realpre.add_m(); + m->resize(len); + ms[i] = &(*m)[0]; - auto& queue = messages[pair.first]; + auto& queue = messages.at(handle); if(queue.empty()) { - std::vector v(len); - generate_random_message(&cmix_ctx, v.data()); - swap_k_for_r(&cmix_ctx, &(*realpre.mutable_m(index))[0], v.data(), data[handle].shared_value, index); - } else { - std::string x = to_string(data.at(handle).shared_value, cmix_ctx); - { - std::stringstream ss; - ss << "shared_key: "; - for(auto&& c : x) { - ss << "\\" << std::setw(3) << std::setfill('0') << std::oct << (unsigned int) c; - } - BOOST_LOG_TRIVIAL(trace) << ss.str(); - } + std::string v; + v.resize(len); + generate_random_message(&cmix_ctx, &v[0]); + queue.push(v); + } - BOOST_LOG_TRIVIAL(trace) << + msv[i] = queue.front().data(); - swap_k_for_r(&cmix_ctx, &(*realpre.mutable_m(index))[0], queue.front().data(), data.at(handle).shared_value, index); - } - *realpre.mutable_h(index) = handle; + keys[i] = data.at(handle).shared_value; + + realpre.add_h(handle); + + it++; } + + swap_k_for_r( + &cmix_ctx, + ms.data(), + msv.data(), + keys.data(), + index_map.size() + ); + + for(auto&& pair : index_map) { + messages.at(pair.first).pop(); + } + next_node.async_send(realpre); } -- cgit v1.2.3-70-g09d2