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 
17 namespace msgpack {
18 MSGPACK_API_VERSION_NAMESPACE(MSGPACK_DEFAULT_API_NS) {
19 namespace 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  */
27 template <>
28 struct 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
msgpack::MSGPACK_API_VERSION_NAMESPACE
MSGPACK_API_VERSION_NAMESPACE(MSGPACK_DEFAULT_API_NS)
Definition: object_encoders.hpp:18
msgpack
Definition: object_encoders.hpp:17
mmtf::GroupType::atomNameList
std::vector< std::string > atomNameList
Definition: structure_data.hpp:51
mmtf::GroupType
Group (residue) level data store.
Definition: structure_data.hpp:49
mmtf::GroupType::bondAtomList
std::vector< int32_t > bondAtomList
Definition: structure_data.hpp:53
structure_data.hpp
mmtf::GroupType::elementList
std::vector< std::string > elementList
Definition: structure_data.hpp:52
mmtf::GroupType::chemCompType
std::string chemCompType
Definition: structure_data.hpp:57
mmtf::GroupType::groupName
std::string groupName
Definition: structure_data.hpp:55
mmtf::GroupType::formalChargeList
std::vector< int32_t > formalChargeList
Definition: structure_data.hpp:50
mmtf::GroupType::singleLetterCode
char singleLetterCode
Definition: structure_data.hpp:56
mmtf
Definition: binary_decoder.hpp:24
mmtf::GroupType::bondOrderList
std::vector< int8_t > bondOrderList
Definition: structure_data.hpp:54