1 #ifndef BOOST_SERIALIZATION_COLLECTION_SIZE_TYPE_HPP
2 #define BOOST_SERIALIZATION_COLLECTION_SIZE_TYPE_HPP
4 // (C) Copyright 2005 Matthias Troyer
5 // (C) Copyright 2020 Robert Ramey
7 // Use, modification and distribution is subject to the Boost Software
8 // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
9 // http://www.boost.org/LICENSE_1_0.txt)
11 #include <cstddef> // size_t
12 #include <boost/assert.hpp>
13 #include <boost/operators.hpp>
14 #include <boost/serialization/level.hpp>
15 #include <boost/serialization/is_bitwise_serializable.hpp>
18 namespace serialization {
20 template<typename T> // T is the basic type holding the integer
21 struct cardinal_number : private
22 boost::totally_ordered<cardinal_number<T> >,
23 boost::additive<cardinal_number<T> >,
24 boost::unit_steppable<cardinal_number<T> >
27 template<typename CharType, typename Traits>
28 friend std::basic_ostream<CharType, Traits> & operator<<(
29 const std::basic_ostream<CharType, Traits> & bos,
30 const cardinal_number & rhs
32 template<typename CharType, typename Traits>
33 friend std::basic_istream<CharType, Traits> & operator>>(
34 std::basic_istream<CharType, Traits> & bis,
35 const cardinal_number & rhs
39 cardinal_number(T t = 0) :
42 cardinal_number(unsigned int t) :
45 cardinal_number(int t) :
53 // assignment operator
54 cardinal_number & operator=(const cardinal_number & rhs){
58 // basic operations upon which others depend
59 // totally ordered / less_than_comparable
60 bool operator<(const cardinal_number & rhs) const {
63 bool operator==(const cardinal_number & rhs) const {
64 return m_t == rhs.m_t;
67 cardinal_number & operator+=(const cardinal_number & rhs){
72 cardinal_number & operator-=(const cardinal_number & rhs){
73 BOOST_ASSERT(m_t >= rhs.m_t);
78 cardinal_number operator++(){
83 cardinal_number operator--(){
84 BOOST_ASSERT(m_t > T(0));
90 typedef cardinal_number<std::size_t> collection_size_type;
92 } } // end namespace boost::serialization
99 template<typename CharType, typename Traits>
100 basic_ostream<CharType, Traits> & operator<<(
101 std::basic_ostream<CharType, Traits> & bos,
102 const boost::serialization::collection_size_type & rhs
108 template<typename CharType, typename Traits>
109 basic_istream<CharType, Traits> & operator>>(
110 std::basic_istream<CharType, Traits> & bis,
111 boost::serialization::collection_size_type & rhs
119 BOOST_CLASS_IMPLEMENTATION( \
120 boost::serialization::collection_size_type, \
123 BOOST_IS_BITWISE_SERIALIZABLE(boost::serialization::collection_size_type)
125 #endif //BOOST_SERIALIZATION_COLLECTION_SIZE_TYPE_HPP