Line data Source code
1 :
2 : /* Copyright (c) 2012-2017, Daniel Nachbaur <danielnachbaur@gmail.com>
3 : * Stefan.Eilemann@epfl.ch
4 : *
5 : * This file is part of Collage <https://github.com/Eyescale/Collage>
6 : *
7 : * This library is free software; you can redistribute it and/or modify it under
8 : * the terms of the GNU Lesser General Public License version 2.1 as published
9 : * by the Free Software Foundation.
10 : *
11 : * This library is distributed in the hope that it will be useful, but WITHOUT
12 : * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13 : * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
14 : * details.
15 : *
16 : * You should have received a copy of the GNU Lesser General Public License
17 : * along with this library; if not, write to the Free Software Foundation, Inc.,
18 : * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19 : */
20 :
21 : #include "objectDataICommand.h"
22 :
23 : #include "buffer.h"
24 : #include <pression/data/CompressorInfo.h>
25 : #include <pression/data/Registry.h>
26 :
27 : namespace co
28 : {
29 : namespace detail
30 : {
31 372105 : class ObjectDataICommand
32 : {
33 : public:
34 371801 : ObjectDataICommand()
35 371801 : : version(0, 0)
36 : , datasize(0)
37 : , sequence(0)
38 : , chunks(1)
39 371801 : , isLast(false)
40 : {
41 371801 : }
42 :
43 : uint128_t version;
44 : uint64_t datasize;
45 : uint32_t sequence;
46 : std::string compressorName;
47 : uint32_t chunks;
48 : bool isLast;
49 : };
50 : }
51 :
52 371798 : ObjectDataICommand::ObjectDataICommand(const ICommand& command)
53 : : ObjectICommand(command)
54 371798 : , _impl(new detail::ObjectDataICommand)
55 : {
56 371798 : _init();
57 371798 : }
58 :
59 3 : ObjectDataICommand::ObjectDataICommand(LocalNodePtr local, NodePtr remote,
60 3 : ConstBufferPtr buffer)
61 : : ObjectICommand(local, remote, buffer)
62 3 : , _impl(new detail::ObjectDataICommand)
63 : {
64 3 : _init();
65 3 : }
66 :
67 152 : ObjectDataICommand::ObjectDataICommand(const ObjectDataICommand& rhs)
68 : : ObjectICommand(rhs)
69 152 : , _impl(new detail::ObjectDataICommand(*rhs._impl))
70 : {
71 152 : _init();
72 152 : }
73 :
74 371953 : void ObjectDataICommand::_init()
75 : {
76 371953 : if (isValid())
77 371953 : *this >> _impl->version >> _impl->datasize >> _impl->sequence >>
78 743906 : _impl->isLast >> _impl->compressorName >> _impl->chunks;
79 371953 : }
80 :
81 743906 : ObjectDataICommand::~ObjectDataICommand()
82 : {
83 371953 : delete _impl;
84 371953 : }
85 :
86 371641 : uint128_t ObjectDataICommand::getVersion() const
87 : {
88 371641 : return _impl->version;
89 : }
90 :
91 185799 : uint32_t ObjectDataICommand::getSequence() const
92 : {
93 185799 : return _impl->sequence;
94 : }
95 :
96 163 : uint64_t ObjectDataICommand::getDataSize() const
97 : {
98 163 : return _impl->datasize;
99 : }
100 :
101 159 : CompressorInfo ObjectDataICommand::getCompressorInfo() const
102 : {
103 159 : return pression::data::Registry::getInstance().find(_impl->compressorName);
104 : }
105 :
106 159 : uint32_t ObjectDataICommand::getChunks() const
107 : {
108 159 : return _impl->chunks;
109 : }
110 :
111 185792 : bool ObjectDataICommand::isLast() const
112 : {
113 185792 : return _impl->isLast;
114 : }
115 :
116 0 : std::ostream& operator<<(std::ostream& os, const ObjectDataICommand& command)
117 : {
118 0 : os << static_cast<const ObjectICommand&>(command);
119 0 : if (command.isValid())
120 : {
121 0 : os << " v" << command.getVersion() << " size " << command.getDataSize()
122 0 : << " seq " << command.getSequence() << " last " << command.isLast();
123 : }
124 0 : return os;
125 : }
126 63 : }
|