1 #ifndef __art_struct_h_ 2 #define __art_struct_h_ 3 4 #include <string> 5 #include "art_defs.h" 6 7 using namespace std; 8 9 // type T; if(T oper value) 10 class CExpr{ 11 public: 12 string oper, // операция: "==", "!=", ">", ... 13 type, // пользовательский тип: "int", "ssize_t", "gint", ... 14 // type == "" если это XXX 15 value; // пользовательское значение: "0", "NULL", "-1", "ERR_OK", ... 16 17 #ifdef ART_DEBUG 18 void dump(size_t ntabs); 19 #endif 20 }; 21 22 // Note: vector <CArg> args; В args[0] поле .name всегда пусто; 23 // args[0] используется для указания типа возвращаемого значения. 24 class CArg{ 25 public: 26 string type, // пользовательский тип: "int", "void *", "LTGERR", "MyType", ... 27 name; // пользовательское имя: "fd", "b", "ltgerr", "MyValidValue", ... 28 29 #ifdef ART_DEBUG 30 void dump(size_t ntabs); 31 #endif 32 }; 33 34 #include <vector> 35 36 // *Tor's class 37 class CTor{ 38 public: 39 string name; // название Tor'a: "malloc", "fopen", ... 40 41 vector <CArg> args; // args[0] = return-type, args[1] = первый аргумент, ... 42 43 /* Аргументы считаются с нуля */ 44 45 size_t float_arg_n1; // номер первого аргумента, в котором значение delta 46 // или len. 47 48 size_t float_arg_n2; // номер второго аргумента, в котором значение delta 49 // или len. 50 // 0 - если его нет. 51 // !float_arg_n1 --> !float_arg_n1 52 // ???Если их два, то значения перемножаются??? 53 54 vector <string> validateDom_before; // 1 - 1st arg's domain name. 55 // 0 - always "" (and ignorable by libgen) 56 // проверять i-й аргумент по правилам домена 57 // validateDom[i]: "stdmem", ... 58 // ДО выполнения операции. 59 // "" если проверять не надо 60 61 bool is_handle_arg_out; // есть возвращаемый handle или нет. 62 // если есть, то учитывается handle_arg_out. 63 // если нет, handle_arg_out игнорируется. 64 // введено в версии 2009-12-02, т.к. MAX_VALID_HANDLE_ARG 65 // более не используется. 66 67 size_t handle_arg_out; // номер выходящего handl'а. Значение больше 68 // MAX_VALID_HANDLE_ARG, если его нет. 69 // По этому номеру выполняется проверка по правилам 70 // текущего Домена. 71 // Обычно используется для ALLOCATOR'а. 72 // 0 - проверять фактически retval 73 // i - проверять i-й аргумент 74 // NOTE: когда значение равно 0, то в шаблоне я пишу 75 // не проверять badRetCode посредством задания 76 // .type = "" 77 78 CExpr badRetCode; // .type = "void" если возвращаемого значения нет; 79 // .type = "" если не нужно выполнять evalution, 80 // например в случае когда возвращаемое значение 81 // есть то же самое что и Handle. 82 string cpp_alias; // Указывает что 1) это С++ тор 83 // 2) С-Генераторы должны игнорировать этот тор на 84 // стадии генерации declaration'ов, redefinition'ов; 85 // А вот на стадии генерации ACTION'а использовать это 86 // имя вместо вызова .name'а...(этот код вызывается 87 // при работе С++-генератора) 88 89 #ifdef ART_DEBUG 90 void dump(size_t ntabs); 91 #endif 92 }; 93 94 class CDomain{ 95 public: 96 string name; // имя 97 bool float_handle; // HANDLE как id(Атомарное) или как [x..y](Плавающее) 98 string handle; // void*, int, FILE*, ... 99 CExpr bad_handle; 100 bool includesGlobal; // true -> #include <...>, else #include "..." 101 vector <string> includes; // art.h includes it(to have prototypes) 102 vector <CTor> allocators, 103 deallocators, 104 reallocators, 105 operators; 106 107 #ifdef ART_DEBUG 108 void dump(size_t ntabs); 109 #endif 110 }; 111 112 class CTemplate{ 113 public: 114 string name; 115 string prefix; // префикс к перехватываемым функциям: "art_", ... 116 string errlogmode; // "" никуда не выводить, 117 // "console" - использовать консоль(stderr) 118 // "filename" - использовать файл 119 bool trap_on_io_err; // true -> i/o ошибки во время работы art.lib приводят 120 // к arterrlog() + exit(); 121 // false -> игнорируются 122 bool remote_mode; // true -> artlib будет использовать tcpip 123 bool force_flush; // normaly must be enabled 124 bool fork_enabled; // if false, then artlib tryes to detect 125 // fork() and halt the application. if true (not yet implemented), then 126 // allows handling programm with fork() 127 bool multithreaded; // указывает art.lib'у является ли приложение 128 // многопоточным 129 string threading; // указывает art.lib'у тип многопоточного приложения 130 // "posix", "win32" 131 string compiler_type; // указывает art.lib'у тип компилятора 132 // "gcc", "win32" 133 string trace_target; // if remote_mode -> `"host", port` || `"ip", port` 134 // else `"tracefile"` 135 vector <CDomain> domains; 136 vector <CTor> specialTors; // Tors with arguments from different Domains. 137 // like fread(), read(), ... 138 // vector <CComplexTor> complexTor; 139 // Смотри глобальную цель 33 140 141 #ifdef ART_DEBUG 142 void dump(void); 143 #endif 144 }; 145 146 #endif 147