aboutsummaryrefslogtreecommitdiff
path: root/src/array.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2021-03-24 12:31:05 +0000
committergingerBill <bill@gingerbill.org>2021-03-24 12:31:05 +0000
commitd969d0b264749b2231d2cb014672f6fcdb9b61cd (patch)
tree397372bd105c0cbe180d1d27317dccef47c23899 /src/array.cpp
parent0e3ecc350abfce97029276d03a8c79c885784ae4 (diff)
Make `for in` logic a bit more generic
Diffstat (limited to 'src/array.cpp')
-rw-r--r--src/array.cpp11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/array.cpp b/src/array.cpp
index dc52eeb8d..db51e2bfb 100644
--- a/src/array.cpp
+++ b/src/array.cpp
@@ -103,12 +103,19 @@ Slice<T> slice_clone_from_array(gbAllocator const &allocator, Array<T> const &a)
template <typename T>
+void slice_copy(Slice<T> *slice, Slice<T> const &data) {
+ isize n = gb_min(slice->count, data.count);
+ gb_memmove(slice->data, data.data, gb_size_of(T)*n);
+}
+template <typename T>
void slice_copy(Slice<T> *slice, Slice<T> const &data, isize offset) {
- gb_memmove(slice->data+offset, data.data, gb_size_of(T)*data.count);
+ isize n = gb_clamp(slice->count-offset, 0, data.count);
+ gb_memmove(slice->data+offset, data.data, gb_size_of(T)*n);
}
template <typename T>
void slice_copy(Slice<T> *slice, Slice<T> const &data, isize offset, isize count) {
- gb_memmove(slice->data+offset, data.data, gb_size_of(T)*gb_min(data.count, count));
+ isize n = gb_clamp(slice->count-offset, 0, gb_min(data.count, count));
+ gb_memmove(slice->data+offset, data.data, gb_size_of(T)*n);
}