Error PodVectorBase::_reserve(size_t n, size_t sizeOfT) { PodVectorData* d = _d; if (d->capacity >= n) return kErrorOk; size_t nBytes = sizeof(PodVectorData) + n * sizeOfT; if (nBytes < n) return kErrorNoHeapMemory; if (d == &_nullData) { d = static_cast<PodVectorData*>(ASMJIT_ALLOC(nBytes)); if (!d) return kErrorNoHeapMemory; d->length = 0; } else { d = static_cast<PodVectorData*>(ASMJIT_REALLOC(d, nBytes)); if (!d) return kErrorNoHeapMemory; } d->capacity = n; _d = d; return kErrorOk; }
Error PodVectorBase::_reserve(size_t n, size_t sizeOfT) noexcept { Data* d = _d; if (d->capacity >= n) return kErrorOk; size_t nBytes = sizeof(Data) + n * sizeOfT; if (ASMJIT_UNLIKELY(nBytes < n)) return kErrorNoHeapMemory; if (d == &_nullData) { d = static_cast<Data*>(ASMJIT_ALLOC(nBytes)); if (ASMJIT_UNLIKELY(d == nullptr)) return kErrorNoHeapMemory; d->length = 0; } else { if (isDataStatic(this, d)) { Data* oldD = d; d = static_cast<Data*>(ASMJIT_ALLOC(nBytes)); if (ASMJIT_UNLIKELY(d == nullptr)) return kErrorNoHeapMemory; size_t len = oldD->length; d->length = len; ::memcpy(d->getData(), oldD->getData(), len * sizeOfT); } else { d = static_cast<Data*>(ASMJIT_REALLOC(d, nBytes)); if (ASMJIT_UNLIKELY(d == nullptr)) return kErrorNoHeapMemory; } } d->capacity = n; _d = d; return kErrorOk; }
Error Assembler::_reserve(size_t n) { size_t capacity = getCapacity(); if (n <= capacity) return kErrorOk; uint8_t* newBuffer; if (_buffer == NULL) newBuffer = static_cast<uint8_t*>(ASMJIT_ALLOC(n)); else newBuffer = static_cast<uint8_t*>(ASMJIT_REALLOC(_buffer, n)); if (newBuffer == NULL) return setError(kErrorNoHeapMemory); size_t offset = getOffset(); _buffer = newBuffer; _end = _buffer + n; _cursor = newBuffer + offset; return kErrorOk; }