Cleanup StringsBuffer, add basic ios interop code

This commit is contained in:
UnknownShadow200 2020-12-30 16:24:38 +11:00
parent 2b17800a2c
commit c3819edde3
3 changed files with 48 additions and 7 deletions

View File

@ -756,6 +756,9 @@ cc_bool Convert_ParseBool(const cc_string* str, cc_bool* value) {
*------------------------------------------------------StringsBuffer------------------------------------------------------*
*#########################################################################################################################*/
#define STRINGSBUFFER_BUFFER_EXPAND_SIZE 8192
#define StringsBuffer_GetOffset(raw) ((raw) >> STRINGSBUFFER_LEN_SHIFT)
#define StringsBuffer_GetLength(raw) ((raw) & STRINGSBUFFER_LEN_MASK)
#define StringsBuffer_PackOffset(off) ((off) << STRINGSBUFFER_LEN_SHIFT)
CC_NOINLINE static void StringsBuffer_Init(struct StringsBuffer* buffer) {
buffer->count = 0;
@ -784,8 +787,8 @@ cc_string StringsBuffer_UNSAFE_Get(struct StringsBuffer* buffer, int i) {
if (i < 0 || i >= buffer->count) Logger_Abort("Tried to get String past StringsBuffer end");
flags = buffer->flagsBuffer[i];
offset = flags >> STRINGSBUFFER_LEN_SHIFT;
len = flags & STRINGSBUFFER_LEN_MASK;
offset = StringsBuffer_GetOffset(flags);
len = StringsBuffer_GetLength(flags);
return String_Init(&buffer->textBuffer[offset], len, len);
}
@ -810,7 +813,7 @@ void StringsBuffer_Add(struct StringsBuffer* buffer, const cc_string* str) {
}
Mem_Copy(&buffer->textBuffer[textOffset], str->buffer, str->length);
buffer->flagsBuffer[buffer->count] = str->length | (textOffset << STRINGSBUFFER_LEN_SHIFT);
buffer->flagsBuffer[buffer->count] = str->length | StringsBuffer_PackOffset(textOffset);
buffer->count++;
buffer->totalLength += str->length;
@ -822,8 +825,8 @@ void StringsBuffer_Remove(struct StringsBuffer* buffer, int index) {
if (index < 0 || index >= buffer->count) Logger_Abort("Tried to remove String past StringsBuffer end");
flags = buffer->flagsBuffer[index];
offset = flags >> STRINGSBUFFER_LEN_SHIFT;
len = flags & STRINGSBUFFER_LEN_MASK;
offset = StringsBuffer_GetOffset(flags);
len = StringsBuffer_GetLength(flags);
/* Imagine buffer is this: AAXXYYZZ, and want to delete XX */
/* We iterate from first char of Y to last char of Z, */
@ -834,7 +837,7 @@ void StringsBuffer_Remove(struct StringsBuffer* buffer, int index) {
/* Adjust text offset of elements after this element */
/* Elements may not be in order so must account for that */
offsetAdj = len << STRINGSBUFFER_LEN_SHIFT;
offsetAdj = StringsBuffer_PackOffset(len);
for (i = index; i < buffer->count - 1; i++) {
buffer->flagsBuffer[i] = buffer->flagsBuffer[i + 1];
if (buffer->flagsBuffer[i] >= flags) {

View File

@ -317,7 +317,7 @@ cc_bool EntryList_Remove(struct StringsBuffer* list, const cc_string* key, char
}
void EntryList_Set(struct StringsBuffer* list, const cc_string* key, const cc_string* value, char separator) {
cc_string entry; char entryBuffer[1024];
cc_string entry; char entryBuffer[3072];
String_InitArray(entry, entryBuffer);
if (value->length) {

38
src/interop_ios.m Normal file
View File

@ -0,0 +1,38 @@
#include "Window.h"
#include "Platform.h"
#include "String.h"
#include <UIKit/UIPasteboard.h>
void Clipboard_GetText(cc_string* value) {
const char* raw;
NSString* str;
int len;
str = [UIPasteboard generalPasteboard].string;
if (!str) return;
raw = str.UTF8String;
String_AppendUtf8(value, raw, String_Length(raw));
[str release];
}
void Clipboard_SetText(const cc_string* value) {
char raw[NATIVE_STR_LEN];
NSString* str;
int len;
Platform_EncodeString(raw, value);
str = [NSString stringWithUTF8String:raw];
[UIPasteboard generalPasteboard].string = str;
[str release];
}
void Window_SetTitle(const cc_string* title) {
/* TODO: Implement this somehow */
}
void Window_SetSize(int width, int height) { }
void Window_EnableRawMouse(void) { }
void Window_UpdateRawMouse(void) { }
void Window_DisableRawMouse(void) { }