/* * Copyright 2015 Cloudius Systems */ #include "serializer.hh" #include "database.hh" #include "types.hh" #include "util/serialization.hh" typedef uint32_t count_type; // Me thinks 32-bits are enough for "normal" count purposes. template<> db::serializer::serializer(const utils::UUID& uuid) : _item(uuid), _size(2 * sizeof(uint64_t)) { } template<> void db::serializer::write(output& out, const type& t) { out.write(t.get_most_significant_bits()); out.write(t.get_least_significant_bits()); } template<> void db::serializer::read(utils::UUID& uuid, input& in) { uuid = read(in); } template<> void db::serializer::skip(input& in) { in.skip(2 * sizeof(uint64_t)); } template<> utils::UUID db::serializer::read(input& in) { auto msb = in.read(); auto lsb = in.read(); return utils::UUID(msb, lsb); } template<> db::serializer::serializer(const bytes& b) : _item(b), _size(output::serialized_size(b)) { } template<> void db::serializer::write(output& out, const type& t) { out.write(t); } template<> void db::serializer::read(bytes& b, input& in) { b = in.read(); } template<> db::serializer::serializer(const bytes_view& v) : _item(v), _size(output::serialized_size(v)) { } template<> void db::serializer::write(output& out, const type& t) { out.write(t); } template<> void db::serializer::read(bytes_view& v, input& in) { v = in.read(); } template<> bytes_view db::serializer::read(input& in) { return in.read(); } template<> db::serializer::serializer(const sstring& s) : _item(s), _size(output::serialized_size(s)) { } template<> void db::serializer::write(output& out, const type& t) { out.write(t); } template<> void db::serializer::read(sstring& s, input& in) { s = in.read(); } template<> db::serializer::serializer(const tombstone& t) : _item(t), _size(sizeof(t.timestamp) + sizeof(decltype(t.deletion_time.time_since_epoch().count()))) { } template<> void db::serializer::write(output& out, const type& t) { out.write(t.timestamp); out.write(t.deletion_time.time_since_epoch().count()); } template<> void db::serializer::read(tombstone& t, input& in) { t.timestamp = in.read(); auto deletion_time = in.read(); t.deletion_time = gc_clock::time_point(gc_clock::duration(deletion_time)); } template<> db::serializer::serializer(const atomic_cell_view& c) : _item(c), _size(bytes_view_serializer(c.serialize()).size()) { } template<> void db::serializer::write(output& out, const atomic_cell_view& t) { bytes_view_serializer::write(out, t.serialize()); } template<> void db::serializer::read(atomic_cell_view& c, input& in) { c = atomic_cell_view::from_bytes(bytes_view_serializer::read(in)); } template<> atomic_cell_view db::serializer::read(input& in) { return atomic_cell_view::from_bytes(bytes_view_serializer::read(in)); } template<> db::serializer::serializer(const collection_mutation::view& c) : _item(c), _size(bytes_view_serializer(c.serialize()).size()) { } template<> void db::serializer::write(output& out, const collection_mutation::view& t) { bytes_view_serializer::write(out, t.serialize()); } template<> void db::serializer::read(collection_mutation::view& c, input& in) { c = collection_mutation::view::from_bytes(bytes_view_serializer::read(in)); } template<> db::serializer::serializer(const partition_key_view& key) : _item(key), _size(sizeof(uint16_t) /* size */ + key.representation().size()) { } template<> void db::serializer::write(output& out, const partition_key_view& key) { bytes_view v = key.representation(); out.write(v.size()); out.write(v.begin(), v.end()); } template<> void db::serializer::read(partition_key_view& b, input& in) { auto len = in.read(); b = partition_key_view::from_bytes(in.read_view(len)); } template<> partition_key_view db::serializer::read(input& in) { auto len = in.read(); return partition_key_view::from_bytes(in.read_view(len)); } template<> void db::serializer::skip(input& in) { auto len = in.read(); in.skip(len); } template<> db::serializer::serializer(const clustering_key_view& key) : _item(key), _size(sizeof(uint16_t) /* size */ + key.representation().size()) { } template<> void db::serializer::write(output& out, const clustering_key_view& key) { bytes_view v = key.representation(); out.write(v.size()); out.write(v.begin(), v.end()); } template<> void db::serializer::read(clustering_key_view& b, input& in) { auto len = in.read(); b = clustering_key_view::from_bytes(in.read_view(len)); } template<> clustering_key_view db::serializer::read(input& in) { auto len = in.read(); return clustering_key_view::from_bytes(in.read_view(len)); } template<> db::serializer::serializer(const clustering_key_prefix_view& key) : _item(key), _size(sizeof(uint16_t) /* size */ + key.representation().size()) { } template<> void db::serializer::write(output& out, const clustering_key_prefix_view& key) { bytes_view v = key.representation(); out.write(v.size()); out.write(v.begin(), v.end()); } template<> void db::serializer::read(clustering_key_prefix_view& b, input& in) { auto len = in.read(); b = clustering_key_prefix_view::from_bytes(in.read_view(len)); } template<> clustering_key_prefix_view db::serializer::read(input& in) { auto len = in.read(); return clustering_key_prefix_view::from_bytes(in.read_view(len)); } template<> db::serializer::serializer(const frozen_mutation& mutation) : _item(mutation), _size(sizeof(uint32_t) /* size */ + mutation.representation().size()) { } template<> void db::serializer::write(output& out, const frozen_mutation& mutation) { bytes_view v = mutation.representation(); out.write(v); } template<> void db::serializer::read(frozen_mutation& m, input& in) { m = read(in); } template<> frozen_mutation db::serializer::read(input& in) { return frozen_mutation(bytes_serializer::read(in)); } template<> db::serializer::serializer(const db::replay_position& rp) : _item(rp), _size(sizeof(uint64_t) * 2) { } template<> void db::serializer::write(output& out, const db::replay_position& rp) { out.write(rp.id); out.write(rp.pos); } template<> void db::serializer::read(db::replay_position& rp, input& in) { rp.id = in.read(); rp.pos = in.read(); } template class db::serializer ; template class db::serializer ; template class db::serializer ; template class db::serializer ; template class db::serializer ; template class db::serializer ; template class db::serializer ; template class db::serializer ; template class db::serializer ; template class db::serializer ; template class db::serializer ; template class db::serializer ;