Sources Pipelines Documentation

Allocators  
buffer_ref.ipp
1 #pragma once
2 
3 #include <type_traits>
4 
5 
6 namespace boost { namespace memory {
7 
8 template <typename pointer_type>
10  pointer_type* pointer,
11  size_t length)
12  :
13  data_(reinterpret_cast<void*>(pointer)),
14  length_(length)
15 {
16 
17 }
18 
19 template <typename pointer_type>
21  const pointer_type* pointer,
22  size_t length)
23  :
24  data_(reinterpret_cast<void*>(const_cast<pointer_type*>(pointer))),
25  length_(length)
26 {
27 
28 }
29 
30 template <typename pointer_type>
31 inline buffer_ref::buffer_ref(pointer_type* pointer)
32  :
33  data_(reinterpret_cast<void*>(pointer)),
34  length_(sizeof(pointer_type))
35 {
36 
37 }
38 
40  :
41  data_(block.address),
42  length_(block.size)
43 {
44 
45 }
46 
47 inline buffer_ref::buffer_ref(const std::string& s)
48  :
49  data_(reinterpret_cast<void*>(const_cast<char*>(s.data()))),
50  length_(s.length())
51 {
52 
53 }
54 
55 template <typename reference_type>
56 inline reference_type buffer_ref::as()
57 {
58  static_assert(std::is_reference<reference_type>::value, "must be a reference type!");
59 
60  using base_type = typename std::remove_reference<reference_type>::type;
61  using pointer_type = typename std::add_pointer<base_type>::type;
62 
63  return *reinterpret_cast<pointer_type>(data_);
64 }
65 
66 template <typename pointer_type>
67 inline pointer_type buffer_ref::as_pointer()
68 {
69  static_assert(std::is_pointer<pointer_type>::value, "must be a pointer");
70 
71  return reinterpret_cast<pointer_type>(data_);
72 }
73 
74 inline size_t buffer_ref::length() const
75 {
76  return length_;
77 }
78 
79 inline buffer_ref buffer_ref::subbuf(size_t length) const
80 {
81  return buffer_ref(data_, length);
82 }
83 
84 } }
85 
size_t length() const
Number of bytes in the buffer.
Definition: buffer_ref.ipp:74
reference_type as()
Obtains a reference to the underlying memory block treating it as the given reference_type.
Definition: buffer_ref.ipp:56
A non-owning reference to a buffer.
Definition: buffer_ref.hpp:18
pointer_type as_pointer()
Obtains a reference to the underlying memory block treating it as a representation of the given point...
Definition: buffer_ref.ipp:67
buffer_ref subbuf(size_t length) const
Obtains a sub buffer with the given size.
Definition: buffer_ref.ipp:79
buffer_ref(pointer_type *data, size_t length)
Creates a reference through a pointer and length.
Definition: buffer_ref.ipp:9
Represents an allocated memory block.