CernVM-FS  2.12.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
ring_buffer.h
Go to the documentation of this file.
1 
5 #ifndef CVMFS_RING_BUFFER_H_
6 #define CVMFS_RING_BUFFER_H_
7 
8 #include <cstddef>
9 
10 #include "util/single_copy.h"
11 
18  public:
22  typedef size_t ObjectHandle_t;
24 
25  explicit RingBuffer(size_t total_size);
26  ~RingBuffer();
27 
32  ObjectHandle_t PushFront(const void *obj, size_t size);
33 
39 
43  size_t GetObjectSize(ObjectHandle_t handle) const;
44 
49  void CopyObject(ObjectHandle_t handle, void *to) const;
50 
54  void CopySlice(ObjectHandle_t handle, size_t size, size_t offset,
55  void *to) const;
56 
57  // All objects are prepended by a size tag, so we can store objects only
58  // up to the available space minus the size of the size tag
59  size_t GetMaxObjectSize() const { return total_size_ - sizeof(size_t); }
60  bool HasSpaceFor(size_t size) const {
61  return free_space_ >= size + sizeof(size_t);
62  }
63 
64  size_t free_space() const { return free_space_; }
65 
66  private:
71  void Put(const void *data, size_t size);
76  void Get(size_t from, size_t size, void *to) const;
80  void Shrink(size_t by);
81 
85  const size_t total_size_;
89  size_t free_space_;
93  size_t front_;
97  size_t back_;
101  unsigned char *buffer_;
102 }; // class RingBuffer
103 
104 #endif // CVMFS_RING_H_
ObjectHandle_t PushFront(const void *obj, size_t size)
Definition: ring_buffer.cc:76
size_t GetMaxObjectSize() const
Definition: ring_buffer.h:59
size_t GetObjectSize(ObjectHandle_t handle) const
Definition: ring_buffer.cc:68
size_t front_
Definition: ring_buffer.h:93
void Put(const void *data, size_t size)
Definition: ring_buffer.cc:33
ObjectHandle_t RemoveBack()
Definition: ring_buffer.cc:92
RingBuffer(size_t total_size)
Definition: ring_buffer.cc:17
size_t free_space_
Definition: ring_buffer.h:89
const size_t total_size_
Definition: ring_buffer.h:85
void CopySlice(ObjectHandle_t handle, size_t size, size_t offset, void *to) const
Definition: ring_buffer.cc:111
void Get(size_t from, size_t size, void *to) const
Definition: ring_buffer.cc:49
unsigned char * buffer_
Definition: ring_buffer.h:101
size_t ObjectHandle_t
Definition: ring_buffer.h:22
static const ObjectHandle_t kInvalidObjectHandle
Definition: ring_buffer.h:23
void Shrink(size_t by)
Definition: ring_buffer.cc:62
size_t back_
Definition: ring_buffer.h:97
size_t free_space() const
Definition: ring_buffer.h:64
bool HasSpaceFor(size_t size) const
Definition: ring_buffer.h:60
void CopyObject(ObjectHandle_t handle, void *to) const
Definition: ring_buffer.cc:103
static void size_t size
Definition: smalloc.h:54