MCPcopy Create free account
hub / github.com/cinit/TMoe / resetSize

Method resetSize

app/src/main/cpp/utils/SharedBuffer.cpp:54–96  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

52 }
53
54 [[nodiscard]] bool resetSize(size_t size, bool keepContent) noexcept {
55 std::scoped_lock _(mMutex);
56 if (size == 0) {
57 mSize = 0;
58 return mBuffer != nullptr;
59 }
60 if (mBuffer != nullptr) {
61 if (size * 2 < mActualSize || size > mActualSize) {
62 size_t newSize = int(float(size) / LOAD_FACTOR);
63 void *newBuffer = malloc(newSize);
64 if (newBuffer == nullptr) {
65 return false;
66 }
67 if (keepContent) {
68 size_t cpSize = std::min(size, mSize);
69 memcpy(newBuffer, mBuffer, cpSize);
70 size_t left = newSize - cpSize;
71 if (left > 0) {
72 memset((char *) (newBuffer) + cpSize, 0, left);
73 }
74 } else {
75 memset(newBuffer, 0, newSize);
76 }
77 // fill the old buffer with 0xCC before free for debugging purpose
78 memset(mBuffer, 0xCC, mActualSize);
79 free(mBuffer);
80 mBuffer = newBuffer;
81 mActualSize = newSize;
82 mSize = size;
83 } else {
84 mSize = size;
85 }
86 return true;
87 } else {
88 mBuffer = malloc(size);
89 if (mBuffer == nullptr) {
90 return false;
91 }
92 memset(mBuffer, 0, size);
93 mSize = mActualSize = size;
94 }
95 return true;
96 }
97};
98
99SharedBuffer::SharedBuffer() = default;

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected