mirror of
https://github.com/shadps4-emu/ext-fmt.git
synced 2025-03-06 00:57:23 +00:00
Add a fixed buffer
This commit is contained in:
parent
60c43e8703
commit
36406509d9
@ -629,16 +629,18 @@ template <typename T> class buffer {
|
||||
T* ptr_;
|
||||
size_t size_;
|
||||
size_t capacity_;
|
||||
bool fixed_;
|
||||
|
||||
protected:
|
||||
// Don't initialize ptr_ since it is not accessed to save a few cycles.
|
||||
FMT_SUPPRESS_MSC_WARNING(26495)
|
||||
buffer(size_t sz) FMT_NOEXCEPT : size_(sz), capacity_(sz) {}
|
||||
buffer(size_t sz) FMT_NOEXCEPT : size_(sz), capacity_(sz), fixed_(false) {}
|
||||
|
||||
buffer(T* p = nullptr, size_t sz = 0, size_t cap = 0) FMT_NOEXCEPT
|
||||
: ptr_(p),
|
||||
size_(sz),
|
||||
capacity_(cap) {}
|
||||
buffer(T* p = nullptr, size_t sz = 0, size_t cap = 0,
|
||||
bool fixed = false) FMT_NOEXCEPT : ptr_(p),
|
||||
size_(sz),
|
||||
capacity_(cap),
|
||||
fixed_(fixed) {}
|
||||
|
||||
/** Sets the buffer data and capacity. */
|
||||
void set(T* buf_data, size_t buf_capacity) FMT_NOEXCEPT {
|
||||
@ -705,6 +707,12 @@ template <typename T> class buffer {
|
||||
}
|
||||
};
|
||||
|
||||
// A fixed capacity buffer.
|
||||
template <typename T> class fixed_buffer : buffer<T> {
|
||||
public:
|
||||
fixed_buffer(T* data, size_t capacity) : buffer<T>(data, 0, capacity, true) {}
|
||||
};
|
||||
|
||||
// A container-backed buffer.
|
||||
template <typename Container>
|
||||
class container_buffer : public buffer<typename Container::value_type> {
|
||||
|
@ -372,8 +372,10 @@ reserve(std::back_insert_iterator<Container> it, size_t n) {
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline checked_ptr<T> reserve(buffer_appender<T> it, size_t n) {
|
||||
return reserve(std::back_insert_iterator<buffer<T>>(it), n);
|
||||
inline buffer_appender<T> reserve(buffer_appender<T> it, size_t n) {
|
||||
buffer<T>& buf = get_container(it);
|
||||
buf.reserve(buf.size() + n);
|
||||
return it;
|
||||
}
|
||||
|
||||
template <typename Iterator> inline Iterator& reserve(Iterator& it, size_t) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user