mirror of
https://github.com/hrydgard/ppsspp.git
synced 2024-11-23 13:30:02 +00:00
Add more methods to FastVec
This commit is contained in:
parent
37906384ee
commit
ab34d20058
@ -73,6 +73,8 @@ public:
|
||||
// Out of bounds (past size() - 1) is undefined behavior.
|
||||
T &operator[] (const size_t index) { return data_[index]; }
|
||||
const T &operator[] (const size_t index) const { return data_[index]; }
|
||||
T &at(const size_t index) { return data_[index]; }
|
||||
const T &at(const size_t index) const { return data_[index]; }
|
||||
|
||||
// These two are invalid if empty().
|
||||
const T &back() const { return (*this)[size() - 1]; }
|
||||
@ -88,18 +90,35 @@ public:
|
||||
return data_[pos];
|
||||
}
|
||||
|
||||
void insert(T *destIter, const T *beginIter, const T *endIter) {
|
||||
int pos = destIter - data_;
|
||||
if (beginIter == endIter)
|
||||
return;
|
||||
size_t newItems = endIter - beginIter;
|
||||
IncreaseCapacityTo(size_ + newItems);
|
||||
memmove(data_ + pos + newItems, data_ + pos, (size_ - pos) * sizeof(T));
|
||||
memcpy(data_ + pos, beginIter, newItems * sizeof(T));
|
||||
size_ += newItems;
|
||||
}
|
||||
|
||||
private:
|
||||
void ExtendByOne() {
|
||||
void IncreaseCapacityTo(size_t newCapacity) {
|
||||
if (newCapacity <= capacity_)
|
||||
return;
|
||||
T *oldData = data_;
|
||||
size_t newCapacity = capacity_ * 2;
|
||||
if (newCapacity < 16) {
|
||||
newCapacity = 16;
|
||||
}
|
||||
data_ = (T *)malloc(sizeof(T) * newCapacity);
|
||||
if (capacity_ != 0) {
|
||||
memcpy(data_, oldData, sizeof(T) * size_);
|
||||
free(oldData);
|
||||
}
|
||||
}
|
||||
|
||||
void ExtendByOne() {
|
||||
size_t newCapacity = capacity_ * 2;
|
||||
if (newCapacity < 16) {
|
||||
newCapacity = 16;
|
||||
}
|
||||
IncreaseCapacityTo(newCapacity);
|
||||
size_++;
|
||||
capacity_ = newCapacity;
|
||||
}
|
||||
|
@ -51,7 +51,6 @@
|
||||
#include "Common/Data/Convert/SmallDataConvert.h"
|
||||
#include "Common/Data/Text/Parsers.h"
|
||||
#include "Common/Data/Text/WrapText.h"
|
||||
#include "Common/Data/Collections/FastVec.h"
|
||||
#include "Common/Data/Encoding/Utf8.h"
|
||||
#include "Common/File/Path.h"
|
||||
#include "Common/Input/InputState.h"
|
||||
@ -383,6 +382,16 @@ bool TestFastVec() {
|
||||
b.push_back(33);
|
||||
}
|
||||
EXPECT_EQ_INT((int)b.size(), 103);
|
||||
|
||||
int items[4] = { 50, 60, 70, 80 };
|
||||
b.insert(b.begin() + 1, items, items + 4);
|
||||
EXPECT_EQ_INT(b[0], 8);
|
||||
EXPECT_EQ_INT(b[1], 50);
|
||||
EXPECT_EQ_INT(b[2], 60);
|
||||
EXPECT_EQ_INT(b[3], 70);
|
||||
EXPECT_EQ_INT(b[4], 80);
|
||||
EXPECT_EQ_INT(b[5], 9);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user