Push string/push string copy in string library
This commit is contained in:
parent
ceda879326
commit
89516d827b
|
@ -9,6 +9,8 @@
|
|||
|
||||
#include <stdint.h>
|
||||
|
||||
#include "4coder_lib/4coder_arena.h"
|
||||
#include "4coder_lib/4coder_heap.h"
|
||||
#include "4coder_lib/4coder_string.h"
|
||||
#include "4coder_lib/4cpp_lexer_types.h"
|
||||
#include "4coder_API/4coder_version.h"
|
||||
|
|
|
@ -15,16 +15,15 @@
|
|||
|
||||
#include "4coder_generated/command_metadata.h"
|
||||
|
||||
#include "4coder_lib/4coder_arena.cpp"
|
||||
#include "4coder_lib/4coder_heap.cpp"
|
||||
|
||||
#define FSTRING_IMPLEMENTATION
|
||||
#include "4coder_lib/4coder_string.h"
|
||||
#include "4coder_lib/4coder_table.h"
|
||||
#include "4coder_lib/4coder_arena.h"
|
||||
#include "4coder_lib/4coder_heap.h"
|
||||
#include "4coder_lib/4coder_utf8.h"
|
||||
#include "4coder_lib/4cpp_lexer.h"
|
||||
|
||||
#include "4coder_lib/4coder_arena.cpp"
|
||||
#include "4coder_lib/4coder_heap.cpp"
|
||||
|
||||
#include "4coder_ui_helper.h"
|
||||
#include "4coder_helper.h"
|
||||
|
|
|
@ -176,7 +176,7 @@ bind(context, key_up, MDFR_NONE, lister__move_up);
|
|||
bind(context, 'k', MDFR_ALT, lister__move_up);
|
||||
bind(context, key_page_up, MDFR_NONE, lister__move_up);
|
||||
bind(context, key_down, MDFR_NONE, lister__move_down);
|
||||
bind(context, 'j', MDFR_ALT, lister__move_up);
|
||||
bind(context, 'j', MDFR_ALT, lister__move_down);
|
||||
bind(context, key_page_down, MDFR_NONE, lister__move_down);
|
||||
bind(context, key_mouse_wheel, MDFR_NONE, lister__wheel_scroll);
|
||||
bind(context, key_mouse_left, MDFR_NONE, lister__mouse_press);
|
||||
|
@ -576,7 +576,7 @@ static Meta_Key_Bind fcoder_binds_for_default_default_lister_ui_map[16] = {
|
|||
{0, 107, 2, "lister__move_up", 15, LINK_PROCS(lister__move_up)},
|
||||
{0, 55305, 0, "lister__move_up", 15, LINK_PROCS(lister__move_up)},
|
||||
{0, 55298, 0, "lister__move_down", 17, LINK_PROCS(lister__move_down)},
|
||||
{0, 106, 2, "lister__move_up", 15, LINK_PROCS(lister__move_up)},
|
||||
{0, 106, 2, "lister__move_down", 17, LINK_PROCS(lister__move_down)},
|
||||
{0, 55306, 0, "lister__move_down", 17, LINK_PROCS(lister__move_down)},
|
||||
{0, 55312, 0, "lister__wheel_scroll", 20, LINK_PROCS(lister__wheel_scroll)},
|
||||
{0, 55308, 0, "lister__mouse_press", 19, LINK_PROCS(lister__mouse_press)},
|
||||
|
|
|
@ -81,26 +81,6 @@ end_temp_memory(Temp_Memory temp){
|
|||
((Partition*)temp.handle)->pos = temp.pos;
|
||||
}
|
||||
|
||||
inline Tail_Temp_Partition
|
||||
begin_tail_part(Partition *data, i32_4tech size){
|
||||
Tail_Temp_Partition result = {};
|
||||
if (data->pos + size <= data->max){
|
||||
result.handle = data;
|
||||
result.old_max = data->max;
|
||||
data->max -= size;
|
||||
result.part = make_part(data->base + data->max, size);
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
|
||||
inline void
|
||||
end_tail_part(Tail_Temp_Partition temp){
|
||||
if (temp.handle){
|
||||
Partition *part = (Partition*)temp.handle;
|
||||
part->max = temp.old_max;
|
||||
}
|
||||
}
|
||||
|
||||
#define reset_temp_memory end_temp_memory
|
||||
|
||||
// BOTTOM
|
||||
|
|
|
@ -55,12 +55,6 @@ struct Temp_Memory{
|
|||
i32_4tech pos;
|
||||
};
|
||||
|
||||
struct Tail_Temp_Partition{
|
||||
Partition part;
|
||||
void *handle;
|
||||
i32_4tech old_max;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
// BOTTOM
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
4coder_string.h - Version 1.0.114
|
||||
4coder_string.h - Version 1.0.116
|
||||
no warranty implied; use at your own risk
|
||||
|
||||
This software is in the public domain. Where that dedication is not
|
||||
|
@ -217,6 +217,8 @@ FSTRING_LINK String get_first_double_line(String source);
|
|||
FSTRING_LINK String get_next_double_line(String source, String line);
|
||||
FSTRING_LINK String get_next_word(String source, String prev_word);
|
||||
FSTRING_LINK String get_first_word(String source);
|
||||
FSTRING_LINK String string_push(Partition *part, i32_4tech size);
|
||||
FSTRING_LINK String string_push_copy(Partition *part, String str);
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -487,11 +489,7 @@ make_string_cap(void *str, i32_4tech size, i32_4tech mem_size){
|
|||
#if !defined(FSTRING_GUARD)
|
||||
FSTRING_INLINE String
|
||||
make_string(void *str, i32_4tech size){
|
||||
String result;
|
||||
result.str = (char*)str;
|
||||
result.size = size;
|
||||
result.memory_size = size;
|
||||
return(result);
|
||||
return(make_string(str, size, size));
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -976,6 +974,7 @@ compare_ss(String a, String b){
|
|||
// Finding Characters and Substrings
|
||||
//
|
||||
|
||||
|
||||
#if defined(FSTRING_IMPLEMENTATION)
|
||||
FSTRING_LINK i32_4tech
|
||||
find_c_char(char *str, i32_4tech start, char character){
|
||||
|
@ -1476,7 +1475,8 @@ append_padding(String *dest, char c, i32_4tech target_size){
|
|||
|
||||
#if defined(FSTRING_IMPLEMENTATION)
|
||||
FSTRING_LINK void
|
||||
string_interpret_escapes(String src, char *dst){
|
||||
string_interpret_escapes(String src, char *dst)
|
||||
{
|
||||
i32_4tech mode = 0;
|
||||
i32_4tech j = 0;
|
||||
for (i32_4tech i = 0; i < src.size; ++i){
|
||||
|
@ -2295,6 +2295,31 @@ get_first_word(String source){
|
|||
}
|
||||
#endif
|
||||
|
||||
#if defined(FSTRING_IMPLEMENTATION)
|
||||
FSTRING_LINK String
|
||||
string_push(Partition *part, i32_4tech size){
|
||||
String result = {};
|
||||
result.str = push_array(part, char, size);
|
||||
if (result.str != 0){
|
||||
result.memory_size = size;
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(FSTRING_IMPLEMENTATION)
|
||||
FSTRING_LINK String
|
||||
string_push_copy(Partition *part, String str){
|
||||
String result = {};
|
||||
result.str = push_array(part, char, str.size + 1);
|
||||
if (result.str != 0){
|
||||
result.memory_size = str.size + 1;
|
||||
copy(&result, str);
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
#endif
|
||||
|
||||
// TODO(allen): eliminate this.
|
||||
#ifndef FSTRING_EXPERIMENTAL
|
||||
#define FSTRING_EXPERIMENTAL
|
||||
|
|
|
@ -12,21 +12,19 @@
|
|||
// TODO(allen): get away from string.h
|
||||
#include <string.h>
|
||||
|
||||
#include "4ed_defines.h"
|
||||
|
||||
#include "4coder_API/4coder_custom.h"
|
||||
|
||||
#include "4ed_defines.h"
|
||||
#include "4ed_math.h"
|
||||
#include "4ed_font.h"
|
||||
#include "4ed_system.h"
|
||||
|
||||
#define PREFERRED_ALIGNMENT 8
|
||||
|
||||
#include "4coder_lib/4coder_arena.cpp"
|
||||
#include "4coder_lib/4coder_heap.cpp"
|
||||
#define FSTRING_IMPLEMENTATION
|
||||
#define FSTRING_C
|
||||
#include "4coder_lib/4coder_string.h"
|
||||
#include "4coder_lib/4coder_arena.h"
|
||||
#include "4coder_lib/4coder_heap.h"
|
||||
#include "4coder_lib/4coder_table.h"
|
||||
#include "4coder_lib/4coder_utf8.h"
|
||||
|
||||
|
@ -35,9 +33,6 @@ struct Mem_Options{
|
|||
Heap heap;
|
||||
};
|
||||
|
||||
#include "4coder_lib/4coder_arena.cpp"
|
||||
#include "4coder_lib/4coder_heap.cpp"
|
||||
|
||||
#include "4ed_render_target.h"
|
||||
#include "4ed_render_format.h"
|
||||
#include "4ed.h"
|
||||
|
|
|
@ -629,7 +629,7 @@ generate_remapping_code_and_data(Partition *part){
|
|||
bind(part, mappings, 'k' , MDFR_ALT , lister__move_up);
|
||||
bind(part, mappings, key_page_up , MDFR_NONE, lister__move_up);
|
||||
bind(part, mappings, key_down , MDFR_NONE, lister__move_down);
|
||||
bind(part, mappings, 'j' , MDFR_ALT , lister__move_up);
|
||||
bind(part, mappings, 'j' , MDFR_ALT , lister__move_down);
|
||||
bind(part, mappings, key_page_down, MDFR_NONE, lister__move_down);
|
||||
bind(part, mappings, key_mouse_wheel , MDFR_NONE, lister__wheel_scroll);
|
||||
bind(part, mappings, key_mouse_left , MDFR_NONE, lister__mouse_press);
|
||||
|
|
|
@ -23,10 +23,10 @@
|
|||
# include "4coder_API/4coder_keycodes.h"
|
||||
# include "4coder_API/4coder_style.h"
|
||||
|
||||
# define FSTRING_IMPLEMENTATION
|
||||
# include "4coder_lib/4coder_string.h"
|
||||
# include "4coder_lib/4coder_arena.h"
|
||||
# include "4coder_lib/4coder_arena.cpp"
|
||||
# define FSTRING_IMPLEMENTATION
|
||||
# include "4coder_lib/4coder_string.h"
|
||||
|
||||
# include "4coder_API/4coder_types.h"
|
||||
|
||||
|
|
|
@ -17,14 +17,13 @@
|
|||
#include "4coder_lib/4coder_utf8.h"
|
||||
|
||||
#if defined(FRED_SUPER)
|
||||
# include "4coder_API/4coder_keycodes.h"
|
||||
# include "4coder_API/4coder_style.h"
|
||||
|
||||
# define FSTRING_IMPLEMENTATION
|
||||
# include "4coder_lib/4coder_string.h"
|
||||
# include "4coder_lib/4coder_arena.h"
|
||||
# include "4coder_lib/4coder_arena.cpp"
|
||||
# define FSTRING_IMPLEMENTATION
|
||||
# include "4coder_lib/4coder_string.h"
|
||||
|
||||
# include "4coder_API/4coder_keycodes.h"
|
||||
# include "4coder_API/4coder_style.h"
|
||||
# include "4coder_API/4coder_types.h"
|
||||
|
||||
#else
|
||||
|
|
|
@ -28,16 +28,14 @@
|
|||
#include "4coder_lib/4coder_utf8.h"
|
||||
|
||||
#if defined(FRED_SUPER)
|
||||
# include "4coder_API/4coder_keycodes.h"
|
||||
# include "4coder_API/4coder_style.h"
|
||||
|
||||
# define FSTRING_IMPLEMENTATION
|
||||
# include "4coder_lib/4coder_string.h"
|
||||
# include "4coder_lib/4coder_arena.h"
|
||||
# include "4coder_lib/4coder_arena.cpp"
|
||||
# define FSTRING_IMPLEMENTATION
|
||||
# include "4coder_lib/4coder_string.h"
|
||||
|
||||
# include "4coder_API/4coder_keycodes.h"
|
||||
# include "4coder_API/4coder_style.h"
|
||||
# include "4coder_API/4coder_types.h"
|
||||
|
||||
#else
|
||||
# include "4coder_default_bindings.cpp"
|
||||
#endif
|
||||
|
@ -59,8 +57,13 @@
|
|||
|
||||
//////////////////////////////
|
||||
|
||||
enum{
|
||||
ErrorString_UseLog = 0,
|
||||
ErrorString_UseErrorBox = 1,
|
||||
};
|
||||
|
||||
internal void
|
||||
win32_output_error_string(b32 use_error_box = true);
|
||||
win32_output_error_string(i32 error_string_type);
|
||||
|
||||
//////////////////////////////
|
||||
|
||||
|
@ -293,7 +296,7 @@ internal void
|
|||
win32_post_clipboard(char *text, i32 len){
|
||||
if (OpenClipboard(win32vars.window_handle)){
|
||||
if (!EmptyClipboard()){
|
||||
win32_output_error_string(false);
|
||||
win32_output_error_string(ErrorString_UseLog);
|
||||
}
|
||||
HANDLE memory_handle = GlobalAlloc(GMEM_MOVEABLE, len + 1);
|
||||
if (memory_handle){
|
||||
|
@ -789,24 +792,24 @@ win32_init_gl(HDC hdc){
|
|||
format.iLayerType = PFD_MAIN_PLANE;
|
||||
i32 suggested_format_index = ChoosePixelFormat(hwgldc, &format);
|
||||
if (suggested_format_index == 0){
|
||||
win32_output_error_string();
|
||||
win32_output_error_string(ErrorString_UseErrorBox);
|
||||
GLInitFail("ChoosePixelFormat");
|
||||
}
|
||||
|
||||
DescribePixelFormat(hwgldc, suggested_format_index, sizeof(format), &format);
|
||||
if (!SetPixelFormat(hwgldc, suggested_format_index, &format)){
|
||||
win32_output_error_string();
|
||||
win32_output_error_string(ErrorString_UseErrorBox);
|
||||
GLInitFail("SetPixelFormat");
|
||||
}
|
||||
|
||||
HGLRC wglcontext = wglCreateContext(hwgldc);
|
||||
if (wglcontext == 0){
|
||||
win32_output_error_string();
|
||||
win32_output_error_string(ErrorString_UseErrorBox);
|
||||
GLInitFail("wglCreateContext");
|
||||
}
|
||||
|
||||
if (!wglMakeCurrent(hwgldc, wglcontext)){
|
||||
win32_output_error_string();
|
||||
win32_output_error_string(ErrorString_UseErrorBox);
|
||||
GLInitFail("wglMakeCurrent");
|
||||
}
|
||||
|
||||
|
@ -1326,7 +1329,7 @@ WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdS
|
|||
|
||||
LOG("Initializing clipboard\n");
|
||||
if (!AddClipboardFormatListener(win32vars.window_handle)){
|
||||
win32_output_error_string(false);
|
||||
win32_output_error_string(ErrorString_UseLog);
|
||||
}
|
||||
|
||||
win32vars.clip_max = KB(16);
|
||||
|
|
|
@ -20,7 +20,7 @@ system_load_library_direct(Library *library, char *name){
|
|||
library->lib = LoadLibraryA(name);
|
||||
b32 success = (library->lib != 0);
|
||||
if (!success){
|
||||
win32_output_error_string(false);
|
||||
win32_output_error_string(ErrorString_UseLog);
|
||||
}
|
||||
return(success);
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
1
|
||||
0
|
||||
116
|
||||
117
|
||||
|
||||
|
||||
|
|
|
@ -18,9 +18,11 @@
|
|||
|
||||
#define BACKUP_FOLDER ".." SLASH ".." SLASH "string_backup"
|
||||
|
||||
#include "../4coder_lib/4cpp_lexer.h"
|
||||
#include "../4coder_lib/4coder_arena.h"
|
||||
#include "../4coder_lib/4coder_arena.cpp"
|
||||
#define FSTRING_IMPLEMENTATION
|
||||
#include "../4coder_lib/4coder_string.h"
|
||||
#include "../4coder_lib/4cpp_lexer.h"
|
||||
|
||||
#include "../4ed_defines.h"
|
||||
#include "../meta/4ed_meta_defines.h"
|
||||
|
@ -149,17 +151,18 @@ print_function_body_code(String *out, Parse_Context *context, i32 start){
|
|||
}
|
||||
|
||||
internal void
|
||||
file_move(char *path, char *file_name){
|
||||
fm_copy_file(fm_str(file_name), fm_str(path, "/", file_name));
|
||||
file_move(Partition *part, char *path, char *file_name){
|
||||
fm_copy_file(fm_str(part, file_name), fm_str(part, path, "/", file_name));
|
||||
}
|
||||
|
||||
int main(){
|
||||
META_BEGIN();
|
||||
fm_init_system();
|
||||
Partition part_ = fm_init_system();
|
||||
Partition *part = &part_;
|
||||
|
||||
// NOTE(allen): Parse the internal string file.
|
||||
char *string_files[] = { INTERNAL_STRING, 0 };
|
||||
Meta_Unit string_unit = compile_meta_unit(".", string_files, ExpandArray(meta_keywords));
|
||||
Meta_Unit string_unit = compile_meta_unit(part, ".", string_files, ExpandArray(meta_keywords));
|
||||
|
||||
if (string_unit.parse == 0){
|
||||
Assert(!"Missing one or more input files!");
|
||||
|
@ -191,7 +194,7 @@ int main(){
|
|||
}
|
||||
|
||||
// NOTE(allen): String Library
|
||||
String out = str_alloc(10 << 20);
|
||||
String out = str_alloc(part, 10 << 20);
|
||||
|
||||
Cpp_Token *token = 0;
|
||||
i32 start = 0;
|
||||
|
@ -212,7 +215,7 @@ int main(){
|
|||
|
||||
append(&out, "/*\n");
|
||||
|
||||
append(&out, GENERATED_FILE " - Version "V_MAJ"."V_MIN".");
|
||||
append(&out, GENERATED_FILE " - Version " V_MAJ "." V_MIN ".");
|
||||
append_int_to_str(&out, build_number);
|
||||
append(&out, "\n");
|
||||
|
||||
|
@ -436,11 +439,11 @@ int main(){
|
|||
|
||||
// NOTE(allen): Publish the new file. (Would like to be able to automatically test the result before publishing).
|
||||
{
|
||||
fm_make_folder_if_missing(BACKUP_FOLDER SLASH V_MAJ SLASH V_MIN);
|
||||
file_move(BACKUP_FOLDER SLASH V_MAJ SLASH V_MIN, INTERNAL_STRING);
|
||||
file_move(BACKUP_FOLDER SLASH V_MAJ SLASH V_MIN, GENERATED_FILE);
|
||||
fm_make_folder_if_missing(part, BACKUP_FOLDER SLASH V_MAJ SLASH V_MIN);
|
||||
file_move(part, BACKUP_FOLDER SLASH V_MAJ SLASH V_MIN, INTERNAL_STRING);
|
||||
file_move(part, BACKUP_FOLDER SLASH V_MAJ SLASH V_MIN, GENERATED_FILE);
|
||||
fm_delete_file(GENERATED_FILE);
|
||||
printf("published "GENERATED_FILE": v%d.%d.%d\n", major_number, minor_number, build_number);
|
||||
printf("published " GENERATED_FILE ": v%d.%d.%d\n", major_number, minor_number, build_number);
|
||||
save_build_number(BUILD_NUMBER_FILE, major_number, minor_number, build_number + 1);
|
||||
}
|
||||
|
||||
|
|
|
@ -201,11 +201,7 @@ does not specify the size of the memory it is also assumed that this size is the
|
|||
of the memory.)
|
||||
DOC(This call returns the String created from the parameters.)
|
||||
*/{
|
||||
String result;
|
||||
result.str = (char*)str;
|
||||
result.size = size;
|
||||
result.memory_size = size;
|
||||
return(result);
|
||||
return(make_string(str, size, size));
|
||||
}
|
||||
|
||||
API_EXPORT_MACRO
|
||||
|
@ -2126,6 +2122,33 @@ DOC_SEE(get_next_word)
|
|||
return(word);
|
||||
}
|
||||
|
||||
API_EXPORT FSTRING_LINK String
|
||||
string_push(Partition *part, i32_4tech size)/*
|
||||
DOC_PARAM(part, A partition on which the string will be allocated.)
|
||||
DOC_PARAM(size, The number of bytes to allocated for the new string.)
|
||||
DOC_RETURN(If successfull returns an empty string with capacity equal to the size parameter, otherwise returns a null string.)*/{
|
||||
String result = {};
|
||||
result.str = push_array(part, char, size);
|
||||
if (result.str != 0){
|
||||
result.memory_size = size;
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
|
||||
API_EXPORT FSTRING_LINK String
|
||||
string_push_copy(Partition *part, String str)/*
|
||||
DOC_PARAM(part, A partition on which the string will be allocated.)
|
||||
DOC_PARAM(str, The source string to copy into the new string. The copy includes a null terminator whther or not the source does.)
|
||||
DOC_RETURN(If successfull returns a string copy of str, otherwise returns a null string.)*/{
|
||||
String result = {};
|
||||
result.str = push_array(part, char, str.size + 1);
|
||||
if (result.str != 0){
|
||||
result.memory_size = str.size + 1;
|
||||
copy(&result, str);
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
|
||||
// TODO(allen): eliminate this.
|
||||
#ifndef FSTRING_EXPERIMENTAL
|
||||
#define FSTRING_EXPERIMENTAL
|
||||
|
|
Loading…
Reference in New Issue