/* * Miscellaneous helpers for common operations. */ // TOP #if !defined(FCODER_HELPER_H) #define FCODER_HELPER_H struct Bind_Helper{ Binding_Unit *cursor, *start, *end; Binding_Unit *header, *group; i32 write_total; i32 error; }; #define BH_ERR_NONE 0 #define BH_ERR_MISSING_END 1 #define BH_ERR_MISSING_BEGIN 2 #define BH_ERR_OUT_OF_MEMORY 3 struct Bind_Buffer{ void *data; i32 size; }; //////////////////////////////// struct File_Name_Data{ String_Const_u8 file_name; Data data; }; //////////////////////////////// typedef b8 Character_Predicate_Function(u8 c); global Character_Predicate character_predicate_alpha = { { 0, 0, 0, 0, 0, 0, 0, 0, 254, 255, 255, 7, 254, 255, 255, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, } }; global Character_Predicate character_predicate_alpha_numeric = { { 0, 0, 0, 0, 0, 0, 255, 3, 254, 255, 255, 7, 254, 255, 255, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, } }; global Character_Predicate character_predicate_alpha_numeric_underscore = { { 0, 0, 0, 0, 0, 0, 255, 3, 254, 255, 255, 135, 254, 255, 255, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, } }; global Character_Predicate character_predicate_uppercase = { { 0, 0, 0, 0, 0, 0, 0, 0, 254, 255, 255, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, } }; global Character_Predicate character_predicate_lowercase = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 255, 255, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, } }; global Character_Predicate character_predicate_base10 = { { 0, 0, 0, 0, 0, 0, 255, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, } }; global Character_Predicate character_predicate_base16 = { { 0, 0, 0, 0, 0, 0, 255, 3, 126, 0, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, } }; global Character_Predicate character_predicate_whitespace = { { 0, 62, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, } }; global Character_Predicate character_predicate_non_whitespace = { { 255, 193, 255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, } }; global Character_Predicate character_predicate_utf8_byte = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, } }; /* DOC(A Seek_Boundary_Flag field specifies a set of "boundary" types used in seeks for the beginning or end of different types of words.) */ typedef u32 Seek_Boundary_Flag; enum{ BoundaryWhitespace = 0x1, BoundaryToken = 0x2, BoundaryAlphanumeric = 0x4, BoundaryCamelCase = 0x8 }; //////////////////////////////// struct Stream_Chunk{ Application_Links *app; Buffer_ID buffer_id; char *base_data; i32 start; i32 end; i32 min_start; i32 max_end; b32 add_null; u32 data_size; char *data; }; // NOTE(allen|4.0.31): Stream_Tokens has been deprecated in favor of the Token_Iterator below. // For examples of usage: 4coder_function_list.cpp 4coder_scope_commands.cpp // If you want to keep your code working easily uncomment the typedef for Stream_Tokens. struct Stream_Tokens_DEP{ Application_Links *app; Buffer_ID buffer_id; Cpp_Token *base_tokens; Cpp_Token *tokens; i32 start; i32 end; i32 count; i32 token_count; }; //typedef Stream_Tokens_DEP Stream_Tokens; struct Token_Range{ Cpp_Token *first; Cpp_Token *one_past_last; }; struct Token_Iterator{ // TODO(allen): source buffer Cpp_Token *token; Token_Range range; }; //////////////////////////////// struct Sort_Pair_i32{ i32 index; i32 key; }; //////////////////////////////// struct History_Group{ Application_Links *app; Buffer_ID buffer; History_Record_Index first; }; #endif // BOTTOM