blob: c8cd0d90ebdd5ce63cab4bbedfc1b2a79fbc600a [file] [log] [blame]
Eric Newberry261dbc22015-07-22 23:18:18 -07001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
Teng Liang02960742017-10-24 00:36:45 -07002/*
Eric Newberry5fade682017-01-21 22:35:47 -07003 * Copyright (c) 2013-2017 Regents of the University of California.
Eric Newberry261dbc22015-07-22 23:18:18 -07004 *
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
Alexander Afanasyeve3874232017-03-26 16:58:59 -050025#include "field-decl.hpp"
Junxiao Shi4b469982015-12-03 18:20:19 +000026
27#include "sequence.hpp"
28#include "cache-policy.hpp"
29#include "nack-header.hpp"
Eric Newberry261dbc22015-07-22 23:18:18 -070030
31#include <boost/mpl/set.hpp>
32
33namespace ndn {
34namespace lp {
35
Alexander Afanasyeve3874232017-03-26 16:58:59 -050036typedef FieldDecl<field_location_tags::Header,
37 Sequence,
38 tlv::Sequence> SequenceField;
Eric Newberry261dbc22015-07-22 23:18:18 -070039BOOST_CONCEPT_ASSERT((Field<SequenceField>));
40
Alexander Afanasyeve3874232017-03-26 16:58:59 -050041typedef FieldDecl<field_location_tags::Header,
42 uint64_t,
43 tlv::FragIndex> FragIndexField;
Eric Newberry261dbc22015-07-22 23:18:18 -070044BOOST_CONCEPT_ASSERT((Field<FragIndexField>));
45
Alexander Afanasyeve3874232017-03-26 16:58:59 -050046typedef FieldDecl<field_location_tags::Header,
47 uint64_t,
48 tlv::FragCount> FragCountField;
Eric Newberry261dbc22015-07-22 23:18:18 -070049BOOST_CONCEPT_ASSERT((Field<FragCountField>));
50
Alexander Afanasyeve3874232017-03-26 16:58:59 -050051typedef FieldDecl<field_location_tags::Header,
52 NackHeader,
53 tlv::Nack> NackField;
Eric Newberry261dbc22015-07-22 23:18:18 -070054BOOST_CONCEPT_ASSERT((Field<NackField>));
55
Alexander Afanasyeve3874232017-03-26 16:58:59 -050056typedef FieldDecl<field_location_tags::Header,
57 uint64_t,
58 tlv::NextHopFaceId> NextHopFaceIdField;
Eric Newberry261dbc22015-07-22 23:18:18 -070059BOOST_CONCEPT_ASSERT((Field<NextHopFaceIdField>));
60
Alexander Afanasyeve3874232017-03-26 16:58:59 -050061typedef FieldDecl<field_location_tags::Header,
62 CachePolicy,
63 tlv::CachePolicy> CachePolicyField;
Eric Newberry261dbc22015-07-22 23:18:18 -070064BOOST_CONCEPT_ASSERT((Field<CachePolicyField>));
65
Alexander Afanasyeve3874232017-03-26 16:58:59 -050066typedef FieldDecl<field_location_tags::Header,
67 uint64_t,
68 tlv::IncomingFaceId> IncomingFaceIdField;
Eric Newberry261dbc22015-07-22 23:18:18 -070069BOOST_CONCEPT_ASSERT((Field<IncomingFaceIdField>));
70
Alexander Afanasyeve3874232017-03-26 16:58:59 -050071typedef FieldDecl<field_location_tags::Header,
72 uint64_t,
73 tlv::CongestionMark> CongestionMarkField;
Eric Newberry4d261b62016-11-10 13:40:09 -070074BOOST_CONCEPT_ASSERT((Field<CongestionMarkField>));
75
Alexander Afanasyeve3874232017-03-26 16:58:59 -050076typedef FieldDecl<field_location_tags::Header,
77 Sequence,
78 tlv::Ack,
79 true> AckField;
Eric Newberry5fade682017-01-21 22:35:47 -070080BOOST_CONCEPT_ASSERT((Field<AckField>));
81
Alexander Afanasyeve3874232017-03-26 16:58:59 -050082typedef FieldDecl<field_location_tags::Header,
83 Sequence,
84 tlv::TxSequence> TxSequenceField;
Eric Newberry1de6be62017-04-03 22:58:41 -070085BOOST_CONCEPT_ASSERT((Field<TxSequenceField>));
86
Teng Liang02960742017-10-24 00:36:45 -070087typedef FieldDecl<field_location_tags::Header,
88 EmptyValue,
89 tlv::NonDiscovery> NonDiscoveryField;
90BOOST_CONCEPT_ASSERT((Field<NonDiscoveryField>));
91
Eric Newberry261dbc22015-07-22 23:18:18 -070092/**
93 * The value of the wire encoded field is the data between the provided iterators. During
94 * encoding, the data is copied from the Buffer into the wire buffer.
95 */
Alexander Afanasyeve3874232017-03-26 16:58:59 -050096typedef FieldDecl<field_location_tags::Fragment,
97 std::pair<Buffer::const_iterator, Buffer::const_iterator>,
98 tlv::Fragment> FragmentField;
Eric Newberry261dbc22015-07-22 23:18:18 -070099BOOST_CONCEPT_ASSERT((Field<FragmentField>));
100
101/**
102 * \brief set of all field declarations
103 */
104typedef boost::mpl::set<
105 FragmentField,
106 SequenceField,
107 FragIndexField,
108 FragCountField,
109 NackField,
110 NextHopFaceIdField,
111 CachePolicyField,
Eric Newberry4d261b62016-11-10 13:40:09 -0700112 IncomingFaceIdField,
Eric Newberry5fade682017-01-21 22:35:47 -0700113 CongestionMarkField,
Eric Newberry1de6be62017-04-03 22:58:41 -0700114 AckField,
Teng Liang02960742017-10-24 00:36:45 -0700115 TxSequenceField,
116 NonDiscoveryField
Eric Newberry261dbc22015-07-22 23:18:18 -0700117 > FieldSet;
118
119} // namespace lp
120} // namespace ndn
121
Junxiao Shi4b469982015-12-03 18:20:19 +0000122#endif // NDN_CXX_LP_FIELDS_HPP