type system readme
This commit is contained in:
parent
5b7f74b445
commit
a7c75cfda2
@ -0,0 +1,30 @@
|
||||
# kerep type system
|
||||
|
||||
For using some kerep capabilities, such as generic structs, unitype, and kprint, types should be *registered*.
|
||||
|
||||
## type id
|
||||
|
||||
Every registered type has its own id (`ktId`), which should be declared in header file and defined in source file.
|
||||
Example:
|
||||
```c
|
||||
//someStruct.h
|
||||
typedef struct { } someStruct;
|
||||
ktId_declare(ktId_someStruct);
|
||||
ktId_declare(ktId_someStructPtr); // pointer to type is another type
|
||||
```
|
||||
```c
|
||||
//someStruct.c
|
||||
ktId_define(ktId_someStruct);
|
||||
ktId_define(ktId_someStructPtr);
|
||||
```
|
||||
|
||||
## type descriptors
|
||||
|
||||
Every registered type should have it's own descriptor (`ktDescriptor`). It's a struct, which contains some information about type and pointers to some specific functions for this type (`toString`, `freeMembers`).
|
||||
|
||||
## type registration
|
||||
|
||||
To finally register a type, you should call macro `kt_register()` between `ktDescriptors_beginInit()` and `ktDescriptors_endInit()`. Better do it at the start of your program. To register all types from kerep, call `ktDescriptors_initKerepTypes()`.
|
||||
Examples:
|
||||
+ [ktDescriptors_initKerepTypes()](src/base/type_system/init.c)
|
||||
+ [kerep types registration](tests/main.cpp)
|
||||
Loading…
Reference in New Issue
Block a user