]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/Beast/include/beast/zlib/detail/ranges.hpp
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / Beast / include / beast / zlib / detail / ranges.hpp
diff --git a/ceph/src/Beast/include/beast/zlib/detail/ranges.hpp b/ceph/src/Beast/include/beast/zlib/detail/ranges.hpp
new file mode 100644 (file)
index 0000000..094bd45
--- /dev/null
@@ -0,0 +1,100 @@
+//
+// Copyright (c) 2013-2017 Vinnie Falco (vinnie dot falco at gmail dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// This is a derivative work based on Zlib, copyright below:
+/*
+    Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler
+
+    This software is provided 'as-is', without any express or implied
+    warranty.  In no event will the authors be held liable for any damages
+    arising from the use of this software.
+
+    Permission is granted to anyone to use this software for any purpose,
+    including commercial applications, and to alter it and redistribute it
+    freely, subject to the following restrictions:
+
+    1. The origin of this software must not be misrepresented; you must not
+       claim that you wrote the original software. If you use this software
+       in a product, an acknowledgment in the product documentation would be
+       appreciated but is not required.
+    2. Altered source versions must be plainly marked as such, and must not be
+       misrepresented as being the original software.
+    3. This notice may not be removed or altered from any source distribution.
+
+    Jean-loup Gailly        Mark Adler
+    jloup@gzip.org          madler@alumni.caltech.edu
+
+    The data format used by the zlib library is described by RFCs (Request for
+    Comments) 1950 to 1952 in the files http://tools.ietf.org/html/rfc1950
+    (zlib format), rfc1951 (deflate format) and rfc1952 (gzip format).
+*/
+
+#ifndef BEAST_ZLIB_DETAIL_RANGES_HPP
+#define BEAST_ZLIB_DETAIL_RANGES_HPP
+
+#include <cstdint>
+#include <type_traits>
+
+namespace beast {
+namespace zlib {
+namespace detail {
+
+struct ranges
+{
+    template<bool isConst>
+    struct range
+    {
+        using iter_t =
+            typename std::conditional<isConst,
+                std::uint8_t const*,
+                std::uint8_t*>::type;
+
+        iter_t first;
+        iter_t last;
+        iter_t next;
+
+        // total bytes in range
+        std::size_t
+        size() const
+        {
+            return last - first;
+        }
+
+        // bytes consumed
+        std::size_t
+        used() const
+        {
+            return next - first;
+        }
+
+        // bytes remaining
+        std::size_t
+        avail() const
+        {
+            return last - next;
+        }
+    };
+
+    range<true> in;
+    range<false> out;
+};
+
+// Clamp u to v where u and v are different types
+template<class U, class V>
+inline
+U
+clamp(U u, V v)
+{
+    if(u > v)
+        u = static_cast<U>(v);
+    return u;
+}
+
+} // detail
+} // zlib
+} // beast
+
+#endif