You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-04 12:00:25 +00:00
Use LocalVector for RingBuffer
Updated RingBuffer to use LocalVector instead of Vector, to avoid _copy_on_write overhead when writing to the buffer.
This commit is contained in:
@@ -30,11 +30,11 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "core/templates/vector.h"
|
#include "core/templates/local_vector.h"
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
class RingBuffer {
|
class RingBuffer {
|
||||||
Vector<T> data;
|
LocalVector<T> data;
|
||||||
int read_pos = 0;
|
int read_pos = 0;
|
||||||
int write_pos = 0;
|
int write_pos = 0;
|
||||||
int size_mask;
|
int size_mask;
|
||||||
@@ -142,7 +142,7 @@ public:
|
|||||||
|
|
||||||
Error write(const T &p_v) {
|
Error write(const T &p_v) {
|
||||||
ERR_FAIL_COND_V(space_left() < 1, FAILED);
|
ERR_FAIL_COND_V(space_left() < 1, FAILED);
|
||||||
data.write[inc(write_pos, 1)] = p_v;
|
data[inc(write_pos, 1)] = p_v;
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -159,7 +159,7 @@ public:
|
|||||||
int total = end - pos;
|
int total = end - pos;
|
||||||
|
|
||||||
for (int i = 0; i < total; i++) {
|
for (int i = 0; i < total; i++) {
|
||||||
data.write[pos + i] = p_buf[src++];
|
data[pos + i] = p_buf[src++];
|
||||||
}
|
}
|
||||||
to_write -= total;
|
to_write -= total;
|
||||||
pos = 0;
|
pos = 0;
|
||||||
@@ -199,7 +199,7 @@ public:
|
|||||||
data.resize(int64_t(1) << int64_t(p_power));
|
data.resize(int64_t(1) << int64_t(p_power));
|
||||||
if (old_size < new_size && read_pos > write_pos) {
|
if (old_size < new_size && read_pos > write_pos) {
|
||||||
for (int i = 0; i < write_pos; i++) {
|
for (int i = 0; i < write_pos; i++) {
|
||||||
data.write[(old_size + i) & mask] = data[i];
|
data[(old_size + i) & mask] = data[i];
|
||||||
}
|
}
|
||||||
write_pos = (old_size + write_pos) & mask;
|
write_pos = (old_size + write_pos) & mask;
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Reference in New Issue
Block a user