util: ensure concepts.hpp can compile on its own
This commit also adds comments and test cases for concept checks.
refs #2270
Change-Id: Ibc4239adf8980f5b0c0c2d73b6c4b22fb94cbf18
diff --git a/src/util/concepts.hpp b/src/util/concepts.hpp
index 94baeaa..b61c301 100644
--- a/src/util/concepts.hpp
+++ b/src/util/concepts.hpp
@@ -23,9 +23,12 @@
#define NDN_UTIL_CONCEPTS_HPP
#include <boost/concept/usage.hpp>
+#include "../encoding/block.hpp"
namespace ndn {
+/** \brief a concept check for TLV abstraction with .wireEncode method
+ */
template<class X>
class WireEncodable
{
@@ -33,10 +36,14 @@
BOOST_CONCEPT_USAGE(WireEncodable)
{
X j;
- j.wireEncode();
+ Block block = j.wireEncode();
+ block.size(); // avoid 'unused variable block'
}
};
+/** \brief a concept check for TLV abstraction with .wireDecode method
+ * and constructible from Block
+ */
template<class X>
class WireDecodable
{
@@ -49,6 +56,8 @@
}
};
+/** \brief a concept check for CryptoPP hash algorithm
+ */
template<class X>
class Hashable
{
diff --git a/tests/unit-tests/util/concepts.cpp b/tests/unit-tests/util/concepts.cpp
new file mode 100644
index 0000000..0486013
--- /dev/null
+++ b/tests/unit-tests/util/concepts.cpp
@@ -0,0 +1,61 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (c) 2014, Regents of the University of California,
+ * Arizona Board of Regents,
+ * Colorado State University,
+ * University Pierre & Marie Curie, Sorbonne University,
+ * Washington University in St. Louis,
+ * Beijing Institute of Technology,
+ * The University of Memphis
+ *
+ * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
+ *
+ * ndn-cxx library is free software: you can redistribute it and/or modify it under the
+ * terms of the GNU Lesser General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later version.
+ *
+ * ndn-cxx library is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+ *
+ * You should have received copies of the GNU General Public License and GNU Lesser
+ * General Public License along with ndn-cxx, e.g., in COPYING.md file. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ * See AUTHORS.md for complete list of ndn-cxx authors and contributors.
+ */
+
+#include "util/concepts.hpp"
+
+namespace ndn {
+namespace tests {
+
+class WireEncodableType
+{
+public:
+ const Block&
+ wireEncode();
+};
+BOOST_CONCEPT_ASSERT((WireEncodable<WireEncodableType>));
+
+class WireEncodableType2
+{
+public:
+ Block
+ wireEncode();
+};
+BOOST_CONCEPT_ASSERT((WireEncodable<WireEncodableType2>));
+
+class WireDecodableType
+{
+public:
+ explicit
+ WireDecodableType(const Block& wire);
+
+ void
+ wireDecode(const Block& wire);
+};
+BOOST_CONCEPT_ASSERT((WireDecodable<WireDecodableType>));
+
+} // namespace tests
+} // namespace ndn