diff --git a/base/auxiliary/builder.hpp b/base/auxiliary/builder.hpp index 1729fe0..eb4b0bb 100644 --- a/base/auxiliary/builder.hpp +++ b/base/auxiliary/builder.hpp @@ -21,11 +21,11 @@ using namespace gen; struct Builder; typedef struct Builder Builder; -Builder builder_open ( char const* path ); -void builder_pad_lines ( Builder* builder, s32 num ); -void builder_print ( Builder* builder, Code code ); -void builder_print_fmt_va( Builder* builder, char const* fmt, va_list va ); -void builder_write ( Builder* builder ); +GEN_API Builder builder_open ( char const* path ); +GEN_API void builder_pad_lines ( Builder* builder, s32 num ); +GEN_API void builder_print ( Builder* builder, Code code ); +GEN_API void builder_print_fmt_va( Builder* builder, char const* fmt, va_list va ); +GEN_API void builder_write ( Builder* builder ); forceinline void builder_print_fmt ( Builder* builder, char const* fmt, ... ) { va_list va; diff --git a/base/auxiliary/scanner.hpp b/base/auxiliary/scanner.hpp index 12cc4d3..70f2ef7 100644 --- a/base/auxiliary/scanner.hpp +++ b/base/auxiliary/scanner.hpp @@ -20,9 +20,9 @@ // This is a simple file reader that reads the entire file into memory. // It has an extra option to skip the first few lines for undesired includes. // This is done so that includes can be kept in dependency and component files so that intellisense works. -Code scan_file( char const* path ); +GEN_API Code scan_file( char const* path ); -CodeBody parse_file( const char* path ); +GEN_API CodeBody parse_file( const char* path ); // The follow is basic support for light csv parsing (use it as an example) // Make something robust if its more serious. @@ -40,7 +40,7 @@ struct CSV_Columns2 { Array(ADT_Node) Col_2; }; -CSV_Column parse_csv_one_column(AllocatorInfo allocator, char const* path); -CSV_Columns2 parse_csv_two_columns(AllocatorInfo allocator, char const* path); +GEN_API CSV_Column parse_csv_one_column (AllocatorInfo allocator, char const* path); +GEN_API CSV_Columns2 parse_csv_two_columns(AllocatorInfo allocator, char const* path); #pragma endregion Scanner diff --git a/base/components/ast.hpp b/base/components/ast.hpp index ab107e9..a7b83dd 100644 --- a/base/components/ast.hpp +++ b/base/components/ast.hpp @@ -337,10 +337,10 @@ struct Code #pragma region Statics // Used to identify ASTs that should always be duplicated. (Global constant ASTs) -extern Code Code_Global; +GEN_API extern Code Code_Global; // Used to identify invalid generated code. -extern Code Code_Invalid; +GEN_API extern Code Code_Invalid; #pragma endregion Statics struct Code_POD diff --git a/base/components/header_end.hpp b/base/components/header_end.hpp index 282d4f8..b1ae614 100644 --- a/base/components/header_end.hpp +++ b/base/components/header_end.hpp @@ -6,83 +6,83 @@ #pragma region Constants -extern Macro enum_underlying_macro; +GEN_API extern Macro enum_underlying_macro; -extern Code access_public; -extern Code access_protected; -extern Code access_private; +GEN_API extern Code access_public; +GEN_API extern Code access_protected; +GEN_API extern Code access_private; -extern CodeAttributes attrib_api_export; -extern CodeAttributes attrib_api_import; +GEN_API extern CodeAttributes attrib_api_export; +GEN_API extern CodeAttributes attrib_api_import; -extern Code module_global_fragment; -extern Code module_private_fragment; +GEN_API extern Code module_global_fragment; +GEN_API extern Code module_private_fragment; -extern Code fmt_newline; +GEN_API extern Code fmt_newline; -extern CodePragma pragma_once; +GEN_API extern CodePragma pragma_once; -extern CodeParams param_varadic; +GEN_API extern CodeParams param_varadic; -extern CodePreprocessCond preprocess_else; -extern CodePreprocessCond preprocess_endif; +GEN_API extern CodePreprocessCond preprocess_else; +GEN_API extern CodePreprocessCond preprocess_endif; -extern CodeSpecifiers spec_const; -extern CodeSpecifiers spec_consteval; -extern CodeSpecifiers spec_constexpr; -extern CodeSpecifiers spec_constinit; -extern CodeSpecifiers spec_extern_linkage; -extern CodeSpecifiers spec_final; -extern CodeSpecifiers spec_forceinline; -extern CodeSpecifiers spec_global; -extern CodeSpecifiers spec_inline; -extern CodeSpecifiers spec_internal_linkage; -extern CodeSpecifiers spec_local_persist; -extern CodeSpecifiers spec_mutable; -extern CodeSpecifiers spec_neverinline; -extern CodeSpecifiers spec_noexcept; -extern CodeSpecifiers spec_override; -extern CodeSpecifiers spec_ptr; -extern CodeSpecifiers spec_pure; -extern CodeSpecifiers spec_ref; -extern CodeSpecifiers spec_register; -extern CodeSpecifiers spec_rvalue; -extern CodeSpecifiers spec_static_member; -extern CodeSpecifiers spec_thread_local; -extern CodeSpecifiers spec_virtual; -extern CodeSpecifiers spec_volatile; +GEN_API extern CodeSpecifiers spec_const; +GEN_API extern CodeSpecifiers spec_consteval; +GEN_API extern CodeSpecifiers spec_constexpr; +GEN_API extern CodeSpecifiers spec_constinit; +GEN_API extern CodeSpecifiers spec_extern_linkage; +GEN_API extern CodeSpecifiers spec_final; +GEN_API extern CodeSpecifiers spec_forceinline; +GEN_API extern CodeSpecifiers spec_global; +GEN_API extern CodeSpecifiers spec_inline; +GEN_API extern CodeSpecifiers spec_internal_linkage; +GEN_API extern CodeSpecifiers spec_local_persist; +GEN_API extern CodeSpecifiers spec_mutable; +GEN_API extern CodeSpecifiers spec_neverinline; +GEN_API extern CodeSpecifiers spec_noexcept; +GEN_API extern CodeSpecifiers spec_override; +GEN_API extern CodeSpecifiers spec_ptr; +GEN_API extern CodeSpecifiers spec_pure; +GEN_API extern CodeSpecifiers spec_ref; +GEN_API extern CodeSpecifiers spec_register; +GEN_API extern CodeSpecifiers spec_rvalue; +GEN_API extern CodeSpecifiers spec_static_member; +GEN_API extern CodeSpecifiers spec_thread_local; +GEN_API extern CodeSpecifiers spec_virtual; +GEN_API extern CodeSpecifiers spec_volatile; -extern CodeTypename t_empty; // Used with varaidc parameters. (Exposing just in case its useful for another circumstance) -extern CodeTypename t_auto; -extern CodeTypename t_void; -extern CodeTypename t_int; -extern CodeTypename t_bool; -extern CodeTypename t_char; -extern CodeTypename t_wchar_t; -extern CodeTypename t_class; -extern CodeTypename t_typename; +GEN_API extern CodeTypename t_empty; // Used with varaidc parameters. (Exposing just in case its useful for another circumstance) +GEN_API extern CodeTypename t_auto; +GEN_API extern CodeTypename t_void; +GEN_API extern CodeTypename t_int; +GEN_API extern CodeTypename t_bool; +GEN_API extern CodeTypename t_char; +GEN_API extern CodeTypename t_wchar_t; +GEN_API extern CodeTypename t_class; +GEN_API extern CodeTypename t_typename; #ifdef GEN_DEFINE_LIBRARY_CODE_CONSTANTS // Predefined typename codes. Are set to readonly and are setup during gen::init() - extern Context* _ctx; + GEN_API extern Context* _ctx; - extern CodeTypename t_b32; + GEN_API extern CodeTypename t_b32; - extern CodeTypename t_s8; - extern CodeTypename t_s16; - extern CodeTypename t_s32; - extern CodeTypename t_s64; + GEN_API extern CodeTypename t_s8; + GEN_API extern CodeTypename t_s16; + GEN_API extern CodeTypename t_s32; + GEN_API extern CodeTypename t_s64; - extern CodeTypename t_u8; - extern CodeTypename t_u16; - extern CodeTypename t_u32; - extern CodeTypename t_u64; + GEN_API extern CodeTypename t_u8; + GEN_API extern CodeTypename t_u16; + GEN_API extern CodeTypename t_u32; + GEN_API extern CodeTypename t_u64; - extern CodeTypename t_ssize; - extern CodeTypename t_usize; + GEN_API extern CodeTypename t_ssize; + GEN_API extern CodeTypename t_usize; - extern CodeTypename t_f32; - extern CodeTypename t_f64; + GEN_API extern CodeTypename t_f32; + GEN_API extern CodeTypename t_f64; #endif #pragma endregion Constants diff --git a/base/components/parser_types.hpp b/base/components/parser_types.hpp index d3f43d2..4ec8181 100644 --- a/base/components/parser_types.hpp +++ b/base/components/parser_types.hpp @@ -181,7 +181,7 @@ enum EMacroFlags : u16 // & it would allow UE_DEPRECATED, (UE_PROPERTY / UE_FUNCTION) to chain themselves as attributes of a resolved member function/variable definition MF_Allow_As_Attribute = bit(3), - // When a macro is encountered after attributs and specifiers while parsing a function, or variable: + // When a macro is encountered after attributes and specifiers while parsing a function, or variable: // It will consume the macro and treat it as resolving the definition. (Yes this is for Unreal Engine) // (MUST BE OF MT_Statement TYPE) MF_Allow_As_Definition = bit(4), diff --git a/base/components/static_data.cpp b/base/components/static_data.cpp index 021bc26..c5290e4 100644 --- a/base/components/static_data.cpp +++ b/base/components/static_data.cpp @@ -4,87 +4,87 @@ #endif #pragma region StaticData -global Context* _ctx; -global u32 context_counter; +GEN_API global Context* _ctx; +GEN_API global u32 context_counter; #pragma region Constants -global Macro enum_underlying_macro; +GEN_API global Macro enum_underlying_macro; -global Code Code_Global; -global Code Code_Invalid; +GEN_API global Code Code_Global; +GEN_API global Code Code_Invalid; -global Code access_public; -global Code access_protected; -global Code access_private; +GEN_API global Code access_public; +GEN_API global Code access_protected; +GEN_API global Code access_private; -global CodeAttributes attrib_api_export; -global CodeAttributes attrib_api_import; +GEN_API global CodeAttributes attrib_api_export; +GEN_API global CodeAttributes attrib_api_import; -global Code module_global_fragment; -global Code module_private_fragment; +GEN_API global Code module_global_fragment; +GEN_API global Code module_private_fragment; -global Code fmt_newline; +GEN_API global Code fmt_newline; -global CodeParams param_varadic; +GEN_API global CodeParams param_varadic; -global CodePragma pragma_once; +GEN_API global CodePragma pragma_once; -global CodePreprocessCond preprocess_else; -global CodePreprocessCond preprocess_endif; +GEN_API global CodePreprocessCond preprocess_else; +GEN_API global CodePreprocessCond preprocess_endif; -global CodeSpecifiers spec_const; -global CodeSpecifiers spec_consteval; -global CodeSpecifiers spec_constexpr; -global CodeSpecifiers spec_constinit; -global CodeSpecifiers spec_extern_linkage; -global CodeSpecifiers spec_final; -global CodeSpecifiers spec_forceinline; -global CodeSpecifiers spec_global; -global CodeSpecifiers spec_inline; -global CodeSpecifiers spec_internal_linkage; -global CodeSpecifiers spec_local_persist; -global CodeSpecifiers spec_mutable; -global CodeSpecifiers spec_noexcept; -global CodeSpecifiers spec_neverinline; -global CodeSpecifiers spec_override; -global CodeSpecifiers spec_ptr; -global CodeSpecifiers spec_pure; -global CodeSpecifiers spec_ref; -global CodeSpecifiers spec_register; -global CodeSpecifiers spec_rvalue; -global CodeSpecifiers spec_static_member; -global CodeSpecifiers spec_thread_local; -global CodeSpecifiers spec_virtual; -global CodeSpecifiers spec_volatile; +GEN_API global CodeSpecifiers spec_const; +GEN_API global CodeSpecifiers spec_consteval; +GEN_API global CodeSpecifiers spec_constexpr; +GEN_API global CodeSpecifiers spec_constinit; +GEN_API global CodeSpecifiers spec_extern_linkage; +GEN_API global CodeSpecifiers spec_final; +GEN_API global CodeSpecifiers spec_forceinline; +GEN_API global CodeSpecifiers spec_global; +GEN_API global CodeSpecifiers spec_inline; +GEN_API global CodeSpecifiers spec_internal_linkage; +GEN_API global CodeSpecifiers spec_local_persist; +GEN_API global CodeSpecifiers spec_mutable; +GEN_API global CodeSpecifiers spec_noexcept; +GEN_API global CodeSpecifiers spec_neverinline; +GEN_API global CodeSpecifiers spec_override; +GEN_API global CodeSpecifiers spec_ptr; +GEN_API global CodeSpecifiers spec_pure; +GEN_API global CodeSpecifiers spec_ref; +GEN_API global CodeSpecifiers spec_register; +GEN_API global CodeSpecifiers spec_rvalue; +GEN_API global CodeSpecifiers spec_static_member; +GEN_API global CodeSpecifiers spec_thread_local; +GEN_API global CodeSpecifiers spec_virtual; +GEN_API global CodeSpecifiers spec_volatile; -global CodeTypename t_empty; -global CodeTypename t_auto; -global CodeTypename t_void; -global CodeTypename t_int; -global CodeTypename t_bool; -global CodeTypename t_char; -global CodeTypename t_wchar_t; -global CodeTypename t_class; -global CodeTypename t_typename; +GEN_API global CodeTypename t_empty; +GEN_API global CodeTypename t_auto; +GEN_API global CodeTypename t_void; +GEN_API global CodeTypename t_int; +GEN_API global CodeTypename t_bool; +GEN_API global CodeTypename t_char; +GEN_API global CodeTypename t_wchar_t; +GEN_API global CodeTypename t_class; +GEN_API global CodeTypename t_typename; #ifdef GEN_DEFINE_LIBRARY_CODE_CONSTANTS -global CodeTypename t_b32; +GEN_API global CodeTypename t_b32; -global CodeTypename t_s8; -global CodeTypename t_s16; -global CodeTypename t_s32; -global CodeTypename t_s64; +GEN_API global CodeTypename t_s8; +GEN_API global CodeTypename t_s16; +GEN_API global CodeTypename t_s32; +GEN_API global CodeTypename t_s64; -global CodeTypename t_u8; -global CodeTypename t_u16; -global CodeTypename t_u32; -global CodeTypename t_u64; +GEN_API global CodeTypename t_u8; +GEN_API global CodeTypename t_u16; +GEN_API global CodeTypename t_u32; +GEN_API global CodeTypename t_u64; -global CodeTypename t_ssize; -global CodeTypename t_usize; +GEN_API global CodeTypename t_ssize; +GEN_API global CodeTypename t_usize; -global CodeTypename t_f32; -global CodeTypename t_f64; +GEN_API global CodeTypename t_f32; +GEN_API global CodeTypename t_f64; #endif #pragma endregion Constants diff --git a/base/dependencies/debug.hpp b/base/dependencies/debug.hpp index 04ddcbd..544ccf4 100644 --- a/base/dependencies/debug.hpp +++ b/base/dependencies/debug.hpp @@ -67,8 +67,8 @@ while (0) #endif -void assert_handler( char const* condition, char const* file, char const* function, s32 line, char const* msg, ... ); -s32 assert_crash( char const* condition ); -void process_exit( u32 code ); +GEN_API void assert_handler( char const* condition, char const* file, char const* function, s32 line, char const* msg, ... ); +GEN_API s32 assert_crash( char const* condition ); +GEN_API void process_exit( u32 code ); #pragma endregion Debug diff --git a/base/dependencies/filesystem.hpp b/base/dependencies/filesystem.hpp index 3b82280..1caa47e 100644 --- a/base/dependencies/filesystem.hpp +++ b/base/dependencies/filesystem.hpp @@ -121,20 +121,20 @@ enum FileStandardType * @param std Check zpl_file_standard_type * @return File handle to standard I/O */ -FileInfo* file_get_standard( FileStandardType std ); +GEN_API FileInfo* file_get_standard( FileStandardType std ); /** * Closes the file * @param file */ -FileError file_close( FileInfo* file ); +GEN_API FileError file_close( FileInfo* file ); /** * Returns the currently opened file's name * @param file */ inline - char const* file_name( FileInfo* file ) +char const* file_name( FileInfo* file ) { return file->filename ? file->filename : ""; } @@ -144,7 +144,7 @@ inline * @param file * @param filename */ -FileError file_open( FileInfo* file, char const* filename ); +GEN_API FileError file_open( FileInfo* file, char const* filename ); /** * Opens a file using a specified mode @@ -152,7 +152,7 @@ FileError file_open( FileInfo* file, char const* filename ); * @param mode Access mode to use * @param filename */ -FileError file_open_mode( FileInfo* file, FileMode mode, char const* filename ); +GEN_API FileError file_open_mode( FileInfo* file, FileMode mode, char const* filename ); /** * Reads from a file @@ -200,14 +200,14 @@ constexpr b32 file_no_zero_terminate = false; * @param filepath Path to the file * @return File contents data */ -FileContents file_read_contents( AllocatorInfo a, b32 zero_terminate, char const* filepath ); +GEN_API FileContents file_read_contents( AllocatorInfo a, b32 zero_terminate, char const* filepath ); /** * Returns a size of the file * @param file * @return File size */ -s64 file_size( FileInfo* file ); +GEN_API s64 file_size( FileInfo* file ); /** * Seeks the file cursor from the beginning of file to a specific position @@ -274,7 +274,7 @@ enum FileStreamFlags : u32 * @param file * @param allocator */ -b8 file_stream_new( FileInfo* file, AllocatorInfo allocator ); +GEN_API b8 file_stream_new( FileInfo* file, AllocatorInfo allocator ); /** * Opens a memory stream over an existing buffer @@ -284,14 +284,14 @@ b8 file_stream_new( FileInfo* file, AllocatorInfo allocator ); * @param size Buffer's size * @param flags */ -b8 file_stream_open( FileInfo* file, AllocatorInfo allocator, u8* buffer, ssize size, FileStreamFlags flags ); +GEN_API b8 file_stream_open( FileInfo* file, AllocatorInfo allocator, u8* buffer, ssize size, FileStreamFlags flags ); /** * Retrieves the stream's underlying buffer and buffer size. * @param file memory stream * @param size (Optional) buffer size */ -u8* file_stream_buf( FileInfo* file, ssize* size ); +GEN_API u8* file_stream_buf( FileInfo* file, ssize* size ); extern FileOperations const memory_file_operations; diff --git a/base/dependencies/hashing.hpp b/base/dependencies/hashing.hpp index f16a9df..ee895de 100644 --- a/base/dependencies/hashing.hpp +++ b/base/dependencies/hashing.hpp @@ -5,7 +5,7 @@ #pragma region Hashing -u32 crc32( void const* data, ssize len ); -u64 crc64( void const* data, ssize len ); +GEN_API u32 crc32( void const* data, ssize len ); +GEN_API u64 crc64( void const* data, ssize len ); #pragma endregion Hashing diff --git a/base/dependencies/memory.hpp b/base/dependencies/memory.hpp index ff04129..b189970 100644 --- a/base/dependencies/memory.hpp +++ b/base/dependencies/memory.hpp @@ -41,10 +41,10 @@ void const* pointer_add_const( void const* ptr, ssize bytes ); ssize pointer_diff( void const* begin, void const* end ); //! Copy non-overlapping memory from source to destination. -void* mem_copy( void* dest, void const* source, ssize size ); +GEN_API void* mem_copy( void* dest, void const* source, ssize size ); //! Search for a constant value within the size limit at memory location. -void const* mem_find( void const* data, u8 byte_value, ssize size ); +GEN_API void const* mem_find( void const* data, u8 byte_value, ssize size ); //! Copy memory from source to destination. void* mem_move( void* dest, void const* source, ssize size ); @@ -119,17 +119,17 @@ void* resize_align( AllocatorInfo a, void* ptr, ssize old_size, ssize new_size, /* define GEN_HEAP_ANALYSIS to enable this feature */ /* call zpl_heap_stats_init at the beginning of the entry point */ /* you can call zpl_heap_stats_check near the end of the execution to validate any possible leaks */ -void heap_stats_init( void ); -ssize heap_stats_used_memory( void ); -ssize heap_stats_alloc_count( void ); -void heap_stats_check( void ); +GEN_API void heap_stats_init( void ); +GEN_API ssize heap_stats_used_memory( void ); +GEN_API ssize heap_stats_alloc_count( void ); +GEN_API void heap_stats_check( void ); //! Allocate/Resize memory using default options. //! Use this if you don't need a "fancy" resize allocation void* default_resize_align( AllocatorInfo a, void* ptr, ssize old_size, ssize new_size, ssize alignment ); -void* heap_allocator_proc( void* allocator_data, AllocType type, ssize size, ssize alignment, void* old_memory, ssize old_size, u64 flags ); +GEN_API void* heap_allocator_proc( void* allocator_data, AllocType type, ssize size, ssize alignment, void* old_memory, ssize old_size, u64 flags ); //! The heap allocator backed by operating system's memory manager. constexpr AllocatorInfo heap( void ) { AllocatorInfo allocator = { heap_allocator_proc, nullptr }; return allocator; } @@ -147,25 +147,25 @@ struct VirtualMemory }; //! Initialize virtual memory from existing data. -VirtualMemory vm_from_memory( void* data, ssize size ); +GEN_API VirtualMemory vm_from_memory( void* data, ssize size ); //! Allocate virtual memory at address with size. //! @param addr The starting address of the region to reserve. If NULL, it lets operating system to decide where to allocate it. //! @param size The size to serve. -VirtualMemory vm_alloc( void* addr, ssize size ); +GEN_API VirtualMemory vm_alloc( void* addr, ssize size ); //! Release the virtual memory. -b32 vm_free( VirtualMemory vm ); +GEN_API b32 vm_free( VirtualMemory vm ); //! Trim virtual memory. -VirtualMemory vm_trim( VirtualMemory vm, ssize lead_size, ssize size ); +GEN_API VirtualMemory vm_trim( VirtualMemory vm, ssize lead_size, ssize size ); //! Purge virtual memory. -b32 vm_purge( VirtualMemory vm ); +GEN_API b32 vm_purge( VirtualMemory vm ); //! Retrieve VM's page size and alignment. -ssize virtual_memory_page_size( ssize* alignment_out ); +GEN_API ssize virtual_memory_page_size( ssize* alignment_out ); #pragma region Arena struct Arena; @@ -173,7 +173,7 @@ struct Arena; AllocatorInfo arena_allocator_info( Arena* arena ); // Remove static keyword and rename allocator_proc -void* arena_allocator_proc(void* allocator_data, AllocType type, ssize size, ssize alignment, void* old_memory, ssize old_size, u64 flags); +GEN_API void* arena_allocator_proc(void* allocator_data, AllocType type, ssize size, ssize alignment, void* old_memory, ssize old_size, u64 flags); // Add these declarations after the Arena struct Arena arena_init_from_allocator(AllocatorInfo backing, ssize size); @@ -382,13 +382,13 @@ using FixedArena_4MB = FixedArena< megabytes( 4 ) >; #pragma region Pool struct Pool; -void* pool_allocator_proc(void* allocator_data, AllocType type, ssize size, ssize alignment, void* old_memory, ssize old_size, u64 flags); +GEN_API void* pool_allocator_proc(void* allocator_data, AllocType type, ssize size, ssize alignment, void* old_memory, ssize old_size, u64 flags); -Pool pool_init(AllocatorInfo backing, ssize num_blocks, ssize block_size); -Pool pool_init_align(AllocatorInfo backing, ssize num_blocks, ssize block_size, ssize block_align); -AllocatorInfo pool_allocator_info(Pool* pool); -void pool_clear(Pool* pool); -void pool_free(Pool* pool); + Pool pool_init(AllocatorInfo backing, ssize num_blocks, ssize block_size); + Pool pool_init_align(AllocatorInfo backing, ssize num_blocks, ssize block_size, ssize block_align); + AllocatorInfo pool_allocator_info(Pool* pool); +GEN_API void pool_clear(Pool* pool); + void pool_free(Pool* pool); #if GEN_COMPILER_CPP && ! GEN_C_LIKE_CPP forceinline AllocatorInfo allocator_info(Pool& pool) { return pool_allocator_info(& pool); } diff --git a/base/dependencies/parsing.hpp b/base/dependencies/parsing.hpp index db934c3..c69b26f 100644 --- a/base/dependencies/parsing.hpp +++ b/base/dependencies/parsing.hpp @@ -122,7 +122,7 @@ struct ADT_Node * @param is_array * @return error code */ -u8 adt_make_branch( ADT_Node* node, AllocatorInfo backing, char const* name, b32 is_array ); +GEN_API u8 adt_make_branch( ADT_Node* node, AllocatorInfo backing, char const* name, b32 is_array ); /** * @brief Destroy an ADT branch and its descendants @@ -130,7 +130,7 @@ u8 adt_make_branch( ADT_Node* node, AllocatorInfo backing, char const* name, b32 * @param node * @return error code */ -u8 adt_destroy_branch( ADT_Node* node ); +GEN_API u8 adt_destroy_branch( ADT_Node* node ); /** * @brief Initialise an ADT leaf @@ -140,7 +140,7 @@ u8 adt_destroy_branch( ADT_Node* node ); * @param type Node's type (use zpl_adt_make_branch for container nodes) * @return error code */ -u8 adt_make_leaf( ADT_Node* node, char const* name, ADT_Type type ); +GEN_API u8 adt_make_leaf( ADT_Node* node, char const* name, ADT_Type type ); /** @@ -160,7 +160,7 @@ u8 adt_make_leaf( ADT_Node* node, char const* name, ADT_Type type ); * * @see code/apps/examples/json_get.c */ -ADT_Node* adt_query( ADT_Node* node, char const* uri ); +GEN_API ADT_Node* adt_query( ADT_Node* node, char const* uri ); /** * @brief Find a field node within an object by the given name. @@ -170,7 +170,7 @@ ADT_Node* adt_query( ADT_Node* node, char const* uri ); * @param deep_search Perform search recursively * @return zpl_adt_node * node */ -ADT_Node* adt_find( ADT_Node* node, char const* name, b32 deep_search ); +GEN_API ADT_Node* adt_find( ADT_Node* node, char const* name, b32 deep_search ); /** * @brief Allocate an unitialised node within a container at a specified index. @@ -179,7 +179,7 @@ ADT_Node* adt_find( ADT_Node* node, char const* name, b32 deep_search ); * @param index * @return zpl_adt_node * node */ -ADT_Node* adt_alloc_at( ADT_Node* parent, ssize index ); +GEN_API ADT_Node* adt_alloc_at( ADT_Node* parent, ssize index ); /** * @brief Allocate an unitialised node within a container. @@ -187,7 +187,7 @@ ADT_Node* adt_alloc_at( ADT_Node* parent, ssize index ); * @param parent * @return zpl_adt_node * node */ -ADT_Node* adt_alloc( ADT_Node* parent ); +GEN_API ADT_Node* adt_alloc( ADT_Node* parent ); /** * @brief Move an existing node to a new container at a specified index. @@ -197,7 +197,7 @@ ADT_Node* adt_alloc( ADT_Node* parent ); * @param index * @return zpl_adt_node * node */ -ADT_Node* adt_move_node_at( ADT_Node* node, ADT_Node* new_parent, ssize index ); +GEN_API ADT_Node* adt_move_node_at( ADT_Node* node, ADT_Node* new_parent, ssize index ); /** * @brief Move an existing node to a new container. @@ -206,7 +206,7 @@ ADT_Node* adt_move_node_at( ADT_Node* node, ADT_Node* new_parent, ssize index ); * @param new_parent * @return zpl_adt_node * node */ -ADT_Node* adt_move_node( ADT_Node* node, ADT_Node* new_parent ); +GEN_API ADT_Node* adt_move_node( ADT_Node* node, ADT_Node* new_parent ); /** * @brief Swap two nodes. @@ -215,7 +215,7 @@ ADT_Node* adt_move_node( ADT_Node* node, ADT_Node* new_parent ); * @param other_node * @return */ -void adt_swap_nodes( ADT_Node* node, ADT_Node* other_node ); +GEN_API void adt_swap_nodes( ADT_Node* node, ADT_Node* other_node ); /** * @brief Remove node from container. @@ -223,7 +223,7 @@ void adt_swap_nodes( ADT_Node* node, ADT_Node* other_node ); * @param node * @return */ -void adt_remove_node( ADT_Node* node ); +GEN_API void adt_remove_node( ADT_Node* node ); /** * @brief Initialise a node as an object @@ -233,7 +233,7 @@ void adt_remove_node( ADT_Node* node ); * @param backing * @return */ -b8 adt_set_obj( ADT_Node* obj, char const* name, AllocatorInfo backing ); +GEN_API b8 adt_set_obj( ADT_Node* obj, char const* name, AllocatorInfo backing ); /** * @brief Initialise a node as an array @@ -243,7 +243,7 @@ b8 adt_set_obj( ADT_Node* obj, char const* name, AllocatorInfo backing ); * @param backing * @return */ -b8 adt_set_arr( ADT_Node* obj, char const* name, AllocatorInfo backing ); +GEN_API b8 adt_set_arr( ADT_Node* obj, char const* name, AllocatorInfo backing ); /** * @brief Initialise a node as a string @@ -253,7 +253,7 @@ b8 adt_set_arr( ADT_Node* obj, char const* name, AllocatorInfo backing ); * @param value * @return */ -b8 adt_set_str( ADT_Node* obj, char const* name, char const* value ); +GEN_API b8 adt_set_str( ADT_Node* obj, char const* name, char const* value ); /** * @brief Initialise a node as a float @@ -263,7 +263,7 @@ b8 adt_set_str( ADT_Node* obj, char const* name, char const* value ); * @param value * @return */ -b8 adt_set_flt( ADT_Node* obj, char const* name, f64 value ); +GEN_API b8 adt_set_flt( ADT_Node* obj, char const* name, f64 value ); /** * @brief Initialise a node as a signed integer @@ -273,7 +273,7 @@ b8 adt_set_flt( ADT_Node* obj, char const* name, f64 value ); * @param value * @return */ -b8 adt_set_int( ADT_Node* obj, char const* name, s64 value ); +GEN_API b8 adt_set_int( ADT_Node* obj, char const* name, s64 value ); /** * @brief Append a new node to a container as an object @@ -282,7 +282,7 @@ b8 adt_set_int( ADT_Node* obj, char const* name, s64 value ); * @param name * @return* */ -ADT_Node* adt_append_obj( ADT_Node* parent, char const* name ); +GEN_API ADT_Node* adt_append_obj( ADT_Node* parent, char const* name ); /** * @brief Append a new node to a container as an array @@ -291,7 +291,7 @@ ADT_Node* adt_append_obj( ADT_Node* parent, char const* name ); * @param name * @return* */ -ADT_Node* adt_append_arr( ADT_Node* parent, char const* name ); +GEN_API ADT_Node* adt_append_arr( ADT_Node* parent, char const* name ); /** * @brief Append a new node to a container as a string @@ -301,7 +301,7 @@ ADT_Node* adt_append_arr( ADT_Node* parent, char const* name ); * @param value * @return* */ -ADT_Node* adt_append_str( ADT_Node* parent, char const* name, char const* value ); +GEN_API ADT_Node* adt_append_str( ADT_Node* parent, char const* name, char const* value ); /** * @brief Append a new node to a container as a float @@ -311,7 +311,7 @@ ADT_Node* adt_append_str( ADT_Node* parent, char const* name, char const* value * @param value * @return* */ -ADT_Node* adt_append_flt( ADT_Node* parent, char const* name, f64 value ); +GEN_API ADT_Node* adt_append_flt( ADT_Node* parent, char const* name, f64 value ); /** * @brief Append a new node to a container as a signed integer @@ -321,7 +321,7 @@ ADT_Node* adt_append_flt( ADT_Node* parent, char const* name, f64 value ); * @param value * @return* */ -ADT_Node* adt_append_int( ADT_Node* parent, char const* name, s64 value ); +GEN_API ADT_Node* adt_append_int( ADT_Node* parent, char const* name, s64 value ); /* parser helpers */ @@ -332,7 +332,7 @@ ADT_Node* adt_append_int( ADT_Node* parent, char const* name, s64 value ); * @param base * @return* */ -char* adt_parse_number( ADT_Node* node, char* base ); +GEN_API char* adt_parse_number( ADT_Node* node, char* base ); /** * @brief Parses a text and stores the result into an unitialised node. @@ -342,7 +342,7 @@ char* adt_parse_number( ADT_Node* node, char* base ); * @param base * @return* */ -char* adt_parse_number_strict( ADT_Node* node, char* base_str ); +GEN_API char* adt_parse_number_strict( ADT_Node* node, char* base_str ); /** * @brief Parses and converts an existing string node into a number. @@ -350,7 +350,7 @@ char* adt_parse_number_strict( ADT_Node* node, char* base_str ); * @param node * @return */ -ADT_Error adt_c_str_to_number( ADT_Node* node ); +GEN_API ADT_Error adt_c_str_to_number( ADT_Node* node ); /** * @brief Parses and converts an existing string node into a number. @@ -359,7 +359,7 @@ ADT_Error adt_c_str_to_number( ADT_Node* node ); * @param node * @return */ -ADT_Error adt_c_str_to_number_strict( ADT_Node* node ); +GEN_API ADT_Error adt_c_str_to_number_strict( ADT_Node* node ); /** * @brief Prints a number into a file stream. @@ -371,7 +371,7 @@ ADT_Error adt_c_str_to_number_strict( ADT_Node* node ); * @param node * @return */ -ADT_Error adt_print_number( FileInfo* file, ADT_Node* node ); +GEN_API ADT_Error adt_print_number( FileInfo* file, ADT_Node* node ); /** * @brief Prints a string into a file stream. @@ -385,7 +385,7 @@ ADT_Error adt_print_number( FileInfo* file, ADT_Node* node ); * @param escape_symbol * @return */ -ADT_Error adt_print_string( FileInfo* file, ADT_Node* node, char const* escaped_chars, char const* escape_symbol ); +GEN_API ADT_Error adt_print_string( FileInfo* file, ADT_Node* node, char const* escaped_chars, char const* escape_symbol ); #pragma endregion ADT @@ -401,14 +401,14 @@ enum CSV_Error : u32 typedef ADT_Node CSV_Object; -u8 csv_parse( CSV_Object* root, char* text, AllocatorInfo allocator, b32 has_header ); -u8 csv_parse_delimiter( CSV_Object* root, char* text, AllocatorInfo allocator, b32 has_header, char delim ); -void csv_free( CSV_Object* obj ); + u8 csv_parse( CSV_Object* root, char* text, AllocatorInfo allocator, b32 has_header ); +GEN_API u8 csv_parse_delimiter( CSV_Object* root, char* text, AllocatorInfo allocator, b32 has_header, char delim ); + void csv_free( CSV_Object* obj ); -void csv_write( FileInfo* file, CSV_Object* obj ); -StrBuilder csv_write_string( AllocatorInfo a, CSV_Object* obj ); -void csv_write_delimiter( FileInfo* file, CSV_Object* obj, char delim ); -StrBuilder csv_write_strbuilder_delimiter( AllocatorInfo a, CSV_Object* obj, char delim ); + void csv_write( FileInfo* file, CSV_Object* obj ); + StrBuilder csv_write_string( AllocatorInfo a, CSV_Object* obj ); +GEN_API void csv_write_delimiter( FileInfo* file, CSV_Object* obj, char delim ); +GEN_API StrBuilder csv_write_strbuilder_delimiter( AllocatorInfo a, CSV_Object* obj, char delim ); /* inline */ diff --git a/base/dependencies/printing.hpp b/base/dependencies/printing.hpp index 10df4de..19b485f 100644 --- a/base/dependencies/printing.hpp +++ b/base/dependencies/printing.hpp @@ -13,15 +13,15 @@ typedef struct FileInfo FileInfo; typedef char PrintF_Buffer[GEN_PRINTF_MAXLEN]; // NOTE: A locally persisting buffer is used internally -char* c_str_fmt_buf ( char const* fmt, ... ); -char* c_str_fmt_buf_va ( char const* fmt, va_list va ); -ssize c_str_fmt ( char* str, ssize n, char const* fmt, ... ); -ssize c_str_fmt_va ( char* str, ssize n, char const* fmt, va_list va ); -ssize c_str_fmt_out_va ( char const* fmt, va_list va ); -ssize c_str_fmt_out_err ( char const* fmt, ... ); -ssize c_str_fmt_out_err_va( char const* fmt, va_list va ); -ssize c_str_fmt_file ( FileInfo* f, char const* fmt, ... ); -ssize c_str_fmt_file_va ( FileInfo* f, char const* fmt, va_list va ); +GEN_API char* c_str_fmt_buf ( char const* fmt, ... ); +GEN_API char* c_str_fmt_buf_va ( char const* fmt, va_list va ); +GEN_API ssize c_str_fmt ( char* str, ssize n, char const* fmt, ... ); +GEN_API ssize c_str_fmt_va ( char* str, ssize n, char const* fmt, va_list va ); +GEN_API ssize c_str_fmt_out_va ( char const* fmt, va_list va ); +GEN_API ssize c_str_fmt_out_err ( char const* fmt, ... ); +GEN_API ssize c_str_fmt_out_err_va( char const* fmt, va_list va ); +GEN_API ssize c_str_fmt_file ( FileInfo* f, char const* fmt, ... ); +GEN_API ssize c_str_fmt_file_va ( FileInfo* f, char const* fmt, va_list va ); constexpr char const* Msg_Invalid_Value = "INVALID VALUE PROVIDED"; diff --git a/base/dependencies/string_ops.hpp b/base/dependencies/string_ops.hpp index 3e68f4d..0487186 100644 --- a/base/dependencies/string_ops.hpp +++ b/base/dependencies/string_ops.hpp @@ -33,10 +33,10 @@ char const* c_str_trim( char const* str, b32 catch_newline ); void c_str_to_lower( char* str ); void c_str_to_upper( char* str ); -s64 c_str_to_i64( const char* str, char** end_ptr, s32 base ); -void i64_to_str( s64 value, char* string, s32 base ); -void u64_to_str( u64 value, char* string, s32 base ); -f64 c_str_to_f64( const char* str, char** end_ptr ); +GEN_API s64 c_str_to_i64( const char* str, char** end_ptr, s32 base ); +GEN_API void i64_to_str( s64 value, char* string, s32 base ); +GEN_API void u64_to_str( u64 value, char* string, s32 base ); +GEN_API f64 c_str_to_f64( const char* str, char** end_ptr ); inline const char* char_first_occurence( const char* s, char c ) diff --git a/base/dependencies/strings.hpp b/base/dependencies/strings.hpp index 76b7ce1..039ffe2 100644 --- a/base/dependencies/strings.hpp +++ b/base/dependencies/strings.hpp @@ -122,10 +122,11 @@ struct StrBuilder; forceinline usize strbuilder_grow_formula(usize value); +GEN_API StrBuilder strbuilder_make_reserve (AllocatorInfo allocator, ssize capacity); +GEN_API StrBuilder strbuilder_make_length (AllocatorInfo allocator, char const* str, ssize length); + StrBuilder strbuilder_make_c_str (AllocatorInfo allocator, char const* str); StrBuilder strbuilder_make_str (AllocatorInfo allocator, Str str); -StrBuilder strbuilder_make_reserve (AllocatorInfo allocator, ssize capacity); -StrBuilder strbuilder_make_length (AllocatorInfo allocator, char const* str, ssize length); StrBuilder strbuilder_fmt (AllocatorInfo allocator, char* buf, ssize buf_size, char const* fmt, ...); StrBuilder strbuilder_fmt_buf (AllocatorInfo allocator, char const* fmt, ...); StrBuilder strbuilder_join (AllocatorInfo allocator, char const** parts, ssize num_parts, char const* glue); diff --git a/base/dependencies/timing.hpp b/base/dependencies/timing.hpp index e4b9575..cf7931c 100644 --- a/base/dependencies/timing.hpp +++ b/base/dependencies/timing.hpp @@ -7,13 +7,13 @@ #ifdef GEN_BENCHMARK //! Return CPU timestamp. -u64 read_cpu_time_stamp_counter( void ); +GEN_API u64 read_cpu_time_stamp_counter( void ); //! Return relative time (in seconds) since the application start. -f64 time_rel( void ); +GEN_API f64 time_rel( void ); //! Return relative time since the application start. -u64 time_rel_ms( void ); +GEN_API u64 time_rel_ms( void ); #endif #pragma endregion Timing