Avro C++

Layout.hh
Go to the documentation of this file.
1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
9 *
10 * https://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 */
18
19 #ifndef avro_Layout_hh__
20 #define avro_Layout_hh__
21
22 #include "Config.hh"
23 #include <boost/noncopyable.hpp>
24
27
28 namespace avro {
29
30 class AVRO_DECL Layout : private boost::noncopyable {
31 protected:
32 explicit Layout(size_t offset = 0) : offset_(offset) {}
33
34 public:
35 size_t offset() const {
36 return offset_;
37 }
38 virtual ~Layout() = default;
39
40 private:
41 const size_t offset_;
42 };
43
44 class AVRO_DECL PrimitiveLayout : public Layout {
45 public:
46 explicit PrimitiveLayout(size_t offset = 0) : Layout(offset) {}
47 };
48
49 class AVRO_DECL CompoundLayout : public Layout {
50
51 public:
52 explicit CompoundLayout(size_t offset = 0) : Layout(offset) {}
53
54 void add(std::unique_ptr<Layout> &layout) {
55 layouts_.push_back(std::move(layout));
56 }
57
58 const Layout &at(size_t idx) const {
59 return *layouts_.at(idx);
60 }
61
62 private:
63 std::vector<std::unique_ptr<Layout>> layouts_;
64 };
65
66 } // namespace avro
67
68 #endif
avro::CompoundLayout
Definition: Layout.hh:49
avro
A bunch of templates and specializations for encoding and decoding specific types.
Definition: AvroParse.hh:30
avro::PrimitiveLayout
Definition: Layout.hh:44
avro::Layout
Definition: Layout.hh:30