Minor fixes to string builder, examples
This commit is contained in:
parent
916777c2b5
commit
a0f95174b2
@ -101,7 +101,7 @@ template <typename T> ArrayView<T> to_view (ArenaArray<T>& array, s64 start_offs
|
||||
|
||||
template <typename T> void array_add (ArenaArray<T>& array, ArrayView<T> items) {
|
||||
T* current_point = &array.data[array.count];
|
||||
s64 final_count = array.allocated + items.count;
|
||||
s64 final_count = array.count + items.count;
|
||||
|
||||
if (array.allocated < final_count) {
|
||||
array_reserve(array, final_count);
|
||||
@ -188,7 +188,7 @@ template <typename T> void init_range (T* ptr, s64 start_offset, s64 end_offset)
|
||||
}
|
||||
}
|
||||
|
||||
template <typename T> void poison_range (ArenaArray<T>& array, s64 start, s64 count) {
|
||||
template <typename T> void array_poison_range (ArenaArray<T>& array, s64 start, s64 count) {
|
||||
#if BUILD_DEBUG
|
||||
Assert(start >= 0 && start < array.count);
|
||||
Assert(start + count <= array.count);
|
||||
@ -202,7 +202,9 @@ template <typename T> force_inline void array_reset (ArenaArray<T>& array) {
|
||||
// reset backing array:
|
||||
arena_reset(array.arena);
|
||||
array.count = 0;
|
||||
array.allocated = 0;
|
||||
// should be # of bytes committed / sizeof(T):
|
||||
s64 committed_bytes = (s64)(array.arena->first_uncommitted_page - array.data);
|
||||
array.allocated = committed_bytes / sizeof(T);
|
||||
}
|
||||
|
||||
template <typename T> force_inline void reset_keeping_memory (ArenaArray<T>& array) {
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
ExpandableArena* expandable_arena_new (Arena_Reserve starting_reserve, s32 commit_page_count) {
|
||||
ExpandableArena* new_arena = (ExpandableArena*)bootstrap_arena(starting_reserve, commit_page_count);
|
||||
// Note: beyond first 32 bytes ExpandableArena will not be initialized, so we do it here:
|
||||
// Note: beyond first 32 bytes (sizeof(Arena)) ExpandableArena will not be initialized,
|
||||
// so we do it here:
|
||||
new_arena->current = (Arena*)new_arena;
|
||||
|
||||
new_arena->current_point = expandable_arena_start(new_arena);
|
||||
|
||||
@ -13,7 +13,7 @@ struct ExpandableArena {
|
||||
Arena_Reserve reserve_size = Arena_Reserve::Size_64K;
|
||||
Arena_Flags flags = Arena_Flags::None;
|
||||
u32 initial_commit_page_count = ARENA_DEFAULT_COMMIT_PAGE_COUNT;
|
||||
// Note that this downcasts to Arena, so can be initialized in the same way.
|
||||
// Note that this downcasts to Arena*, so can be initialized in the same way.
|
||||
Arena* current;
|
||||
Array<Arena*> next_arenas;
|
||||
};
|
||||
|
||||
@ -18,7 +18,7 @@ void log_error (string fmt, ...) {
|
||||
Logger* logger = context_logger();
|
||||
logger->proc(message, Log_Level::Error, logger->data);
|
||||
|
||||
reset_string_builder(sb);
|
||||
reset_string_builder(sb, true);
|
||||
}
|
||||
|
||||
void log (string fmt, ...) {
|
||||
@ -41,7 +41,7 @@ void log (string fmt, ...) {
|
||||
Logger* logger = context_logger();
|
||||
logger->proc(message, Log_Level::None, logger->data);
|
||||
|
||||
reset_string_builder(sb);
|
||||
reset_string_builder(sb, true);
|
||||
}
|
||||
|
||||
void print (string message) {
|
||||
|
||||
@ -3,7 +3,7 @@ force_inline Serializer* new_serializer (Arena_Reserve new_reserve) {
|
||||
}
|
||||
|
||||
force_inline void reset_serializer (Serializer* serializer) {
|
||||
poison_range(*serializer, 0, serializer->count);
|
||||
array_poison_range(*serializer, 0, serializer->count);
|
||||
reset_keeping_memory(*serializer);
|
||||
}
|
||||
|
||||
|
||||
@ -200,7 +200,7 @@ force_inline void append_no_add (String_Builder* sb, string s) {
|
||||
// Unfortunately this follows the printf format, which is annoying.
|
||||
// I'd rather have something like fmt::
|
||||
void print_to_builder (String_Builder* sb, string format, va_list args) {
|
||||
s64 expected_final_count = sb->count + format.count + 4096;
|
||||
s64 expected_final_count = max_array_size(*sb);// amount to reserve
|
||||
|
||||
if (sb->allocated < expected_final_count) {
|
||||
array_reserve(*sb, expected_final_count);
|
||||
@ -215,7 +215,7 @@ void print_to_builder (String_Builder* sb, string format, va_list args) {
|
||||
}
|
||||
|
||||
void print_to_builder (String_Builder* sb, string format, ...) {
|
||||
s64 expected_final_count = sb->count + format.count + 4096;
|
||||
s64 expected_final_count = max_array_size(*sb);
|
||||
|
||||
if (sb->allocated < expected_final_count) {
|
||||
array_reserve(*sb, expected_final_count);
|
||||
@ -239,9 +239,13 @@ string string_view (String_Builder* sb) {
|
||||
}
|
||||
|
||||
// for when we want to keep the string builder around and recycle the memory.
|
||||
internal force_inline void reset_string_builder (String_Builder* sb) {
|
||||
poison_range(*sb, 0, sb->count);
|
||||
reset_keeping_memory(*sb);
|
||||
internal force_inline void reset_string_builder (String_Builder* sb, bool keep_memory) {
|
||||
array_poison_range(*sb, 0, sb->count);
|
||||
if (keep_memory) {
|
||||
reset_keeping_memory(*sb);
|
||||
} else {
|
||||
array_reset(*sb);
|
||||
}
|
||||
}
|
||||
|
||||
force_inline string builder_to_string (String_Builder* sb) {
|
||||
|
||||
@ -113,12 +113,12 @@ typedef ArenaArray<u8> String_Builder; // struct String_Builder
|
||||
force_inline String_Builder* new_string_builder (Arena_Reserve new_reserve=Arena_Reserve::Size_64K);
|
||||
force_inline void append (String_Builder* sb, string s);
|
||||
void append (String_Builder* sb, ArrayView<string> strings);
|
||||
// This should probably be called append_but_do_not_increment_count
|
||||
internal force_inline void append_no_add (String_Builder* sb, string s); // for appending null terminators, does not increment count.
|
||||
void print_to_builder (String_Builder* sb, string format, ...);
|
||||
void print_to_builder (String_Builder* sb, string format, va_list args);
|
||||
string string_view (String_Builder* sb);
|
||||
internal force_inline void reset_string_builder (String_Builder* sb);
|
||||
internal force_inline void reset_string_builder (String_Builder* sb, bool keep_memory=false);
|
||||
|
||||
force_inline string builder_to_string (String_Builder* sb); // returns string view
|
||||
internal force_inline void free_string_builder (String_Builder* sb);
|
||||
|
||||
|
||||
@ -469,7 +469,7 @@ internal ArrayView<u8> read_entire_file (File file) {
|
||||
}
|
||||
|
||||
internal ArrayView<u8> read_entire_file (string file_path, bool log_errors) {
|
||||
File f = file_open(file_path, log_errors=log_errors);
|
||||
File f = file_open(file_path, false, false, log_errors);
|
||||
if (!file_is_valid(f)) return {};
|
||||
|
||||
ArrayView<u8> file_data = read_entire_file(f);
|
||||
@ -504,8 +504,9 @@ internal bool write_entire_file (string file_path, ArrayView<u8> file_data) {
|
||||
return write_entire_file(file_path, file_data.data, file_data.count);
|
||||
}
|
||||
|
||||
// #window_creation
|
||||
Window_Type create_window (string new_window_name) {
|
||||
// #window_creation -> put API in OS_Win32.h
|
||||
// void initialize_window_class(float background_color[3]) {}
|
||||
Window_Type create_window (string new_window_name, bool center_window) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@ -222,14 +222,20 @@ internal void Main_Entry_Point (int argc, WCHAR **argv) {
|
||||
log("Hello. There are %s things here\n", string_literal_example.data);
|
||||
|
||||
print("Hello, I am just a printed message to stdout\n\n");
|
||||
|
||||
|
||||
// Testing file writes and reads:
|
||||
print("Writing some nonsense to a file.\n");
|
||||
bool success = write_entire_file("D:/TempLocal/junk.txt", to_view(result));
|
||||
log("Done. Success: %d\n", success);
|
||||
|
||||
// push_allocator(allocator(thread_context()->arena));
|
||||
push_allocator(GPAllocator());
|
||||
string file_path = "D:/Work/OpenBCI/ToolZ/prototyping-gui-main/modules/native-proto-lib/native-sdk-prototyping/src/SignalProcessing.cpp";
|
||||
ArrayView<u8> file_data = read_entire_file(file_path, true);
|
||||
log("file_data: \n");
|
||||
log("%s\n", file_data.data);
|
||||
}
|
||||
// { string s = "hello I am cool";
|
||||
// wstring sw = utf8_to_wide(s);
|
||||
// printf("testing operator overload: %d\n", !s);
|
||||
// printf("testing utf8_to_wide: %ls\n", (wchar_t*)sw.data);
|
||||
// }
|
||||
// debug_break();
|
||||
|
||||
// ImGui_Application();
|
||||
|
||||
// #TODO: #Main - `Main_Entry_Point`
|
||||
|
||||
Loading…
Reference in New Issue
Block a user