MCPcopy Create free account
hub / github.com/danoon2/Boxedwine / putbytes_

Method putbytes_

source/util/ring_buffer.cpp:128–147  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

126
127template <bool Atomic>
128bool Ring_Buffer_Ex<Atomic>::putbytes_(const void *data, size_t len)
129{
130 if (len == 0)
131 return true;
132
133 if (size_free() < len)
134 return false;
135
136 const size_t wp = atomic_load_maybe(wp_, std::memory_order_relaxed);
137 const size_t cap = cap_;
138 const uint8_t *src = (const uint8_t *)data;
139 uint8_t *dst = rbdata_.get();
140
141 const size_t taillen = std::min(len, cap - wp);
142 std::copy_n(src, taillen, &dst[wp]);
143 std::copy_n(src + taillen, len - taillen, dst);
144
145 atomic_store_maybe(wp_, (wp + len < cap) ? (wp + len) : (wp + len - cap), std::memory_order_release);
146 return true;
147}
148
149template class Ring_Buffer_Ex<true>;
150template class Ring_Buffer_Ex<false>;

Callers 1

putMethod · 0.80

Calls 5

atomic_load_maybeFunction · 0.85
minFunction · 0.85
atomic_store_maybeFunction · 0.85
getMethod · 0.45
capacityMethod · 0.45

Tested by

no test coverage detected