blob: 37105e8181051ccf4671506640be2b1b005e8a15 [file] [log] [blame]
Eric Newberry261dbc22015-07-22 23:18:18 -07001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2/**
Davide Pesaventoe1789892017-02-26 15:50:52 -05003 * 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_FIELD_HPP
23#define NDN_CXX_LP_FIELD_HPP
24
25#include "../common.hpp"
26#include "../encoding/encoding-buffer.hpp"
Davide Pesaventoe1789892017-02-26 15:50:52 -050027#include "../util/concepts.hpp"
Eric Newberry261dbc22015-07-22 23:18:18 -070028
29namespace ndn {
30namespace lp {
31
32/**
33 * \brief indicates where a field may occur
34 */
35namespace field_location_tags {
36
37class Base
38{
39};
40
41/**
42 * \brief a header field
43 */
44class Header : public Base
45{
46};
47
48/**
49 * \brief the Fragment field
50 */
51class Fragment : public Base
52{
53};
54
55} // namespace field_location_tags
56
57/**
58 * \brief concept check for fields
59 */
60template<class X>
61struct Field
62{
Davide Pesaventoe1789892017-02-26 15:50:52 -050063 static_assert(std::is_base_of<field_location_tags::Base, typename X::FieldLocation>::value, "");
64 static_assert(std::is_same<typename X::TlvType::value_type, uint64_t>::value, "");
65 static_assert(std::is_same<typename X::IsRepeatable::value_type, bool>::value, "");
66 NDN_CXX_ASSERT_DEFAULT_CONSTRUCTIBLE(typename X::ValueType);
Eric Newberry261dbc22015-07-22 23:18:18 -070067 BOOST_CONCEPT_ASSERT((boost::CopyConstructible<typename X::ValueType>));
Eric Newberry261dbc22015-07-22 23:18:18 -070068 BOOST_CONCEPT_USAGE(Field)
69 {
70 Block wire;
71 X j;
72 typename X::ValueType decoded = j.decode(wire);
73 EncodingBuffer enc;
74 j.encode(enc, decoded);
75 }
76};
77
78} // namespace lp
79} // namespace ndn
80
Junxiao Shi4b469982015-12-03 18:20:19 +000081#endif // NDN_CXX_LP_FIELD_HPP