mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-13 09:35:23 -04:00
Cleanup StringsBuffer, add basic ios interop code
This commit is contained in:
parent
2b17800a2c
commit
c3819edde3
15
src/String.c
15
src/String.c
@ -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) {
|
||||
|
@ -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
38
src/interop_ios.m
Normal 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) { }
|
Loading…
x
Reference in New Issue
Block a user