4coder/4coder_helper.h

179 lines
4.7 KiB
C
Raw Normal View History

/*
* 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{
2019-06-01 23:58:28 +00:00
String_Const_u8 file_name;
Data data;
2018-08-10 21:52:57 +00:00
};
////////////////////////////////
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.
2019-02-01 22:50:33 +00:00
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;
2019-02-01 22:50:33 +00:00
};
//typedef Stream_Tokens_DEP Stream_Tokens;
2019-02-01 22:50:33 +00:00
struct Token_Range{
Cpp_Token *first;
Cpp_Token *one_past_last;
};
struct Token_Iterator{
2019-02-24 07:22:16 +00:00
// TODO(allen): source buffer
2019-02-01 22:50:33 +00:00
Cpp_Token *token;
Token_Range range;
};
2018-08-18 08:16:52 +00:00
////////////////////////////////
struct Sort_Pair_i32{
i32 index;
i32 key;
2018-08-18 08:16:52 +00:00
};
2019-06-01 23:58:28 +00:00
////////////////////////////////
struct History_Group{
Application_Links *app;
Buffer_ID buffer;
History_Record_Index first;
};
#endif
// BOTTOM