MMTF-C++
The C++ language MMTF libraries
object_encoders.hpp
Go to the documentation of this file.
1// *************************************************************************
2//
3// Licensed under the MIT License (see accompanying LICENSE file).
4//
5// The author of this code is: Daniel Farrell
6//
7// Based on mmtf_python, adapted to c++ standards 2018
8//
9// *************************************************************************
10//
11#ifndef MMTF_OBJECT_ENCODERS_H
12#define MMTF_OBJECT_ENCODERS_H
13
14#include "structure_data.hpp"
15#include <msgpack.hpp>
16
17namespace msgpack {
18MSGPACK_API_VERSION_NAMESPACE(MSGPACK_DEFAULT_API_NS) {
19namespace adaptor {
20
21/* *
22 * @brief encode a mmtf::GroupType to a msgpack map type.
23 *
24 * We must use this method for packing because 'char' is treated as an int
25 * by msgpack. We cannot use the prepackaged intrusive method.
26 */
27template <>
28struct object_with_zone<mmtf::GroupType> {
29 void operator()(msgpack::object::with_zone& o, mmtf::GroupType const& v) const {
30 o.type = type::MAP;
31 o.via.map.size = 8;
32 o.via.map.ptr = static_cast<msgpack::object_kv*>(o.zone.allocate_align(sizeof(msgpack::object_kv)*8, MSGPACK_ZONE_ALIGNOF(msgpack::object_kv)));
33 o.via.map.ptr[0].key = msgpack::object("formalChargeList", o.zone);
34 o.via.map.ptr[0].val = msgpack::object(v.formalChargeList, o.zone);
35 o.via.map.ptr[1].key = msgpack::object("atomNameList", o.zone);
36 o.via.map.ptr[1].val = msgpack::object(v.atomNameList, o.zone);
37 o.via.map.ptr[2].key = msgpack::object("elementList", o.zone);
38 o.via.map.ptr[2].val = msgpack::object(v.elementList, o.zone);
39 o.via.map.ptr[3].key = msgpack::object("bondAtomList", o.zone);
40 o.via.map.ptr[3].val = msgpack::object(v.bondAtomList, o.zone);
41 o.via.map.ptr[4].key = msgpack::object("bondOrderList", o.zone);
42 o.via.map.ptr[4].val = msgpack::object(v.bondOrderList, o.zone);
43 o.via.map.ptr[5].key = msgpack::object("groupName", o.zone);
44 o.via.map.ptr[5].val = msgpack::object(v.groupName, o.zone);
45 o.via.map.ptr[6].key = msgpack::object("singleLetterCode", o.zone);
46 o.via.map.ptr[6].val = msgpack::object(std::string(1,v.singleLetterCode), o.zone);
47 o.via.map.ptr[7].key = msgpack::object("chemCompType", o.zone);
48 o.via.map.ptr[7].val = msgpack::object(v.chemCompType, o.zone);
49 }
50};
51
52} // namespace adaptor
53} // MSGPACK_API_VERSION_NAMESPACE(MSGPACK_DEFAULT_API_NS)
54} // namespace msgpack
55
56#endif
Definition: binary_decoder.hpp:24
Definition: object_encoders.hpp:17
MSGPACK_API_VERSION_NAMESPACE(MSGPACK_DEFAULT_API_NS)
Definition: object_encoders.hpp:18
Group (residue) level data store.
Definition: structure_data.hpp:49
char singleLetterCode
Definition: structure_data.hpp:56
std::string chemCompType
Definition: structure_data.hpp:57
std::vector< std::string > elementList
Definition: structure_data.hpp:52
std::vector< int32_t > formalChargeList
Definition: structure_data.hpp:50
std::vector< std::string > atomNameList
Definition: structure_data.hpp:51
std::vector< int8_t > bondOrderList
Definition: structure_data.hpp:54
std::string groupName
Definition: structure_data.hpp:55
std::vector< int32_t > bondAtomList
Definition: structure_data.hpp:53