blob: ad656be390ebf6e0476d7ae54705fd7d24c8f5e1 [file] [log] [blame]
Eric Newberry261dbc22015-07-22 23:18:18 -07001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2/**
3 * Copyright (c) 2013-2015 Regents of the University of California.
4 *
5 * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
6 *
7 * ndn-cxx library is free software: you can redistribute it and/or modify it under the
8 * terms of the GNU Lesser General Public License as published by the Free Software
9 * Foundation, either version 3 of the License, or (at your option) any later version.
10 *
11 * ndn-cxx library is distributed in the hope that it will be useful, but WITHOUT ANY
12 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
13 * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
14 *
15 * You should have received copies of the GNU General Public License and GNU Lesser
16 * General Public License along with ndn-cxx, e.g., in COPYING.md file. If not, see
17 * <http://www.gnu.org/licenses/>.
18 *
19 * See AUTHORS.md for complete list of ndn-cxx authors and contributors.
20 */
21
22#ifndef NDN_CXX_LP_FIELDS_HPP
23#define NDN_CXX_LP_FIELDS_HPP
24
25#include "../common.hpp"
26
27#include "tlv.hpp"
28#include "detail/field-decl.hpp"
29#include "field.hpp"
30
31#include <boost/mpl/set.hpp>
32
33namespace ndn {
34namespace lp {
35
36typedef detail::FieldDecl<field_location_tags::Header,
37 Sequence,
38 tlv::Sequence> SequenceField;
39BOOST_CONCEPT_ASSERT((Field<SequenceField>));
40
41typedef detail::FieldDecl<field_location_tags::Header,
42 uint64_t,
43 tlv::FragIndex> FragIndexField;
44BOOST_CONCEPT_ASSERT((Field<FragIndexField>));
45
46typedef detail::FieldDecl<field_location_tags::Header,
47 uint64_t,
48 tlv::FragCount> FragCountField;
49BOOST_CONCEPT_ASSERT((Field<FragCountField>));
50
51typedef detail::FieldDecl<field_location_tags::Header,
52 NackHeader,
53 tlv::Nack> NackField;
54BOOST_CONCEPT_ASSERT((Field<NackField>));
55
56typedef detail::FieldDecl<field_location_tags::Header,
57 uint64_t,
58 tlv::NextHopFaceId> NextHopFaceIdField;
59BOOST_CONCEPT_ASSERT((Field<NextHopFaceIdField>));
60
61typedef detail::FieldDecl<field_location_tags::Header,
62 CachePolicy,
63 tlv::CachePolicy> CachePolicyField;
64BOOST_CONCEPT_ASSERT((Field<CachePolicyField>));
65
66typedef detail::FieldDecl<field_location_tags::Header,
67 uint64_t,
68 tlv::IncomingFaceId> IncomingFaceIdField;
69BOOST_CONCEPT_ASSERT((Field<IncomingFaceIdField>));
70
71/**
72 * The value of the wire encoded field is the data between the provided iterators. During
73 * encoding, the data is copied from the Buffer into the wire buffer.
74 */
75typedef detail::FieldDecl<field_location_tags::Fragment,
76 std::pair<Buffer::const_iterator, Buffer::const_iterator>,
77 tlv::Fragment> FragmentField;
78BOOST_CONCEPT_ASSERT((Field<FragmentField>));
79
80/**
81 * \brief set of all field declarations
82 */
83typedef boost::mpl::set<
84 FragmentField,
85 SequenceField,
86 FragIndexField,
87 FragCountField,
88 NackField,
89 NextHopFaceIdField,
90 CachePolicyField,
91 IncomingFaceIdField
92 > FieldSet;
93
94} // namespace lp
95} // namespace ndn
96
97#endif // NDN_CXX_LP_FIELDS_HPP