MessagePack for C++
Loading...
Searching...
No Matches
check_container_size.hpp
Go to the documentation of this file.
1//
2// MessagePack for C++ static resolution routine
3//
4// Copyright (C) 2015 KONDO Takatoshi
5//
6// Distributed under the Boost Software License, Version 1.0.
7// (See accompanying file LICENSE_1_0.txt or copy at
8// http://www.boost.org/LICENSE_1_0.txt)
9//
10#ifndef MSGPACK_V1_CHECK_CONTAINER_SIZE_HPP
11#define MSGPACK_V1_CHECK_CONTAINER_SIZE_HPP
12
14#include <stdexcept>
15
16namespace msgpack {
17
21
22struct container_size_overflow : public std::runtime_error {
23 explicit container_size_overflow(const std::string& msg)
24 :std::runtime_error(msg) {}
25#if !defined(MSGPACK_USE_CPP03)
26 explicit container_size_overflow(const char* msg):
27 std::runtime_error(msg) {}
28#endif // !defined(MSGPACK_USE_CPP03)
29};
30
31namespace detail {
32
33template <std::size_t N>
34inline void check_container_size(std::size_t size) {
35 if (size > 0xffffffff) throw container_size_overflow("container size overflow");
36}
37
38template <>
39inline void check_container_size<4>(std::size_t /*size*/) {
40}
41
42template <std::size_t N>
43inline void check_container_size_for_ext(std::size_t size) {
44 if (size > 0xffffffff) throw container_size_overflow("container size overflow");
45}
46
47template <>
48inline void check_container_size_for_ext<4>(std::size_t size) {
49 if (size > 0xfffffffe) throw container_size_overflow("container size overflow");
50}
51
52} // namespace detail
53
54template <typename T>
55inline uint32_t checked_get_container_size(T size) {
56 detail::check_container_size<sizeof(T)>(static_cast<std::size_t>(size));
57 return static_cast<uint32_t>(size);
58}
59
60
62} // MSGPACK_API_VERSION_NAMESPACE(v1)
64
65} // namespace msgpack
66
67#endif // MSGPACK_V1_CHECK_CONTAINER_SIZE_HPP
void check_container_size(std::size_t size)
Definition check_container_size.hpp:34
void check_container_size_for_ext(std::size_t size)
Definition check_container_size.hpp:43
void check_container_size< 4 >(std::size_t)
Definition check_container_size.hpp:39
void check_container_size_for_ext< 4 >(std::size_t size)
Definition check_container_size.hpp:48
Definition adaptor_base.hpp:15
uint32_t checked_get_container_size(T size)
Definition check_container_size.hpp:55
Definition check_container_size.hpp:22
container_size_overflow(const std::string &msg)
Definition check_container_size.hpp:23
container_size_overflow(const char *msg)
Definition check_container_size.hpp:26
#define MSGPACK_API_VERSION_NAMESPACE(ns)
Definition versioning.hpp:66