33 data.
allocate (initialSize, initialiseToZero);
46 jassert (other.data !=
nullptr);
48 memcpy (data, other.data, size);
55 jassert (((ssize_t) sizeInBytes) >= 0);
59 jassert (dataToInitialiseFrom !=
nullptr);
63 if (dataToInitialiseFrom !=
nullptr)
64 memcpy (data, dataToInitialiseFrom, size);
77 memcpy (data, other.data, size);
84 : data (std::move (other.data)),
91 data = std::move (other.data);
99 return matches (other.data, other.size);
104 return ! operator== (other);
109 return size == dataSize
110 && memcmp (data, dataToCompare, size) == 0;
129 if (initialiseToZero && (newSize > size))
130 zeromem (data + size, newSize - size);
134 data.
allocate (newSize, initialiseToZero);
150 if (size < minimumSize)
151 setSize (minimumSize, initialiseToZero);
156 std::swap (size, other.size);
157 data.swapWith (other.data);
163 memset (data, (
int) value, size);
170 jassert (srcData !=
nullptr);
173 memcpy (data + oldSize, srcData, numBytes);
185 jassert (srcData !=
nullptr);
187 memcpy (data, srcData, numBytes);
194 jassert (srcData !=
nullptr);
195 insertPosition = jmin (size, insertPosition);
196 auto trailingDataSize = size - insertPosition;
197 setSize (size + numBytes,
false);
199 if (trailingDataSize > 0)
200 memmove (data + insertPosition + numBytes,
201 data + insertPosition,
204 memcpy (data + insertPosition, srcData, numBytes);
210 if (startByte + numBytesToRemove >= size)
214 else if (numBytesToRemove > 0)
216 memmove (data + startByte,
217 data + startByte + numBytesToRemove,
218 size - (startByte + numBytesToRemove));
220 setSize (size - numBytesToRemove);
226 auto* d =
static_cast<const char*
> (src);
231 num += (size_t) -offset;
235 if ((
size_t) offset + num > size)
236 num = size - (size_t) offset;
239 memcpy (data + offset, d, num);
244 auto* d =
static_cast<char*
> (dst);
248 zeromem (d, (
size_t) -offset);
250 num -= (size_t) -offset;
254 if ((
size_t) offset + num > size)
256 auto newNum = (size_t) size - (
size_t) offset;
257 zeromem (d + newNum, num - newNum);
262 memcpy (d, data + offset, num);
275 auto byte = bitRangeStart >> 3;
276 auto offsetInByte = bitRangeStart & 7;
277 size_t bitsSoFar = 0;
279 while (numBits > 0 && (
size_t)
byte < size)
281 auto bitsThisTime = jmin (numBits, 8 - offsetInByte);
282 const int mask = (0xff >> (8 - bitsThisTime)) << offsetInByte;
284 res |= (((data[byte] & mask) >> offsetInByte) << bitsSoFar);
286 bitsSoFar += bitsThisTime;
287 numBits -= bitsThisTime;
297 auto byte = bitRangeStart >> 3;
298 auto offsetInByte = bitRangeStart & 7;
299 uint32 mask = ~((((uint32) 0xffffffff) << (32 - numBits)) >> (32 - numBits));
301 while (numBits > 0 && (
size_t)
byte < size)
303 auto bitsThisTime = jmin (numBits, 8 - offsetInByte);
305 const uint32 tempMask = (mask << offsetInByte) | ~((((uint32) 0xffffffff) >> offsetInByte) << offsetInByte);
306 const uint32 tempBits = (uint32) bitsToSet << offsetInByte;
308 data[byte] = (char) (((uint32) data[
byte] & tempMask) | tempBits);
311 numBits -= bitsThisTime;
312 bitsToSet >>= bitsThisTime;
313 mask >>= bitsThisTime;
329 for (
int loop = 2; --loop >= 0;)
335 auto c = t.getAndAdvance();
337 if (c >=
'0' && c <=
'9') {
byte |= c -
'0';
break; }
338 if (c >=
'a' && c <=
'z') {
byte |= c - (
'a' - 10);
break; }
339 if (c >=
'A' && c <=
'Z') {
byte |= c - (
'A' - 10);
break; }
343 setSize (
static_cast<size_t> (dest - data));
349 *dest++ = (char)
byte;
354static const char base64EncodingTable[] =
".ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+";
358 auto numChars = ((size << 3) + 5) / 6;
360 String destString ((
unsigned int) size);
361 auto initialLen = destString.
length();
362 destString.
preallocateBytes ((
size_t) initialLen *
sizeof (String::CharPointerType::CharType) + 2 + numChars);
368 for (
size_t i = 0; i < numChars; ++i)
369 d.write ((juce_wchar) (uint8) base64EncodingTable[
getBitRange (i * 6, 6)]);
375static const char base64DecodingTable[] =
377 63, 0, 0, 0, 0, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 0, 0, 0, 0, 0, 0, 0,
378 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
379 0, 0, 0, 0, 0, 0, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52
391 setSize ((
size_t) numBytesNeeded,
true);
393 auto srcChars = dot + 1;
398 auto c = (int) srcChars.getAndAdvance();
405 if (isPositiveAndBelow (c, numElementsInArray (base64DecodingTable)))
407 setBitRange ((
size_t) pos, 6, base64DecodingTable[c]);
static CharPointerType1 find(CharPointerType1 textToSearch, const CharPointerType2 substringToLookFor) noexcept
void malloc(SizeType newNumElements, size_t elementSize=sizeof(ElementType))
void allocate(SizeType newNumElements, bool initialiseToZero)
void realloc(SizeType newNumElements, size_t elementSize=sizeof(ElementType))
void copyFrom(const void *srcData, int destinationOffset, size_t numBytes) noexcept
bool fromBase64Encoding(StringRef encodedString)
String toBase64Encoding() const
bool matches(const void *data, size_t dataSize) const noexcept
void append(const void *data, size_t numBytes)
void replaceAll(const void *data, size_t numBytes)
void copyTo(void *destData, int sourceOffset, size_t numBytes) const noexcept
void insert(const void *dataToInsert, size_t numBytesToInsert, size_t insertPosition)
void swapWith(MemoryBlock &other) noexcept
int getBitRange(size_t bitRangeStart, size_t numBitsToRead) const noexcept
void loadFromHexString(StringRef sourceHexString)
void removeSection(size_t startByte, size_t numBytesToRemove)
MemoryBlock & operator=(const MemoryBlock &)
void fillWith(uint8 valueToUse) noexcept
bool operator!=(const MemoryBlock &other) const noexcept
void setSize(size_t newSize, bool initialiseNewSpaceToZero=false)
void ensureSize(size_t minimumSize, bool initialiseNewSpaceToZero=false)
void setBitRange(size_t bitRangeStart, size_t numBits, int binaryNumberToApply) noexcept
bool operator==(const MemoryBlock &other) const noexcept
int length() const noexcept
String::CharPointerType text
CharPointerType getCharPointer() const noexcept
int length() const noexcept
void preallocateBytes(size_t numBytesNeeded)
static String fromUTF8(const char *utf8buffer, int bufferSizeBytes=-1)
int getIntValue() const noexcept