diff options
Diffstat (limited to 'protocols/Telegram/tgl/generate.h')
-rw-r--r-- | protocols/Telegram/tgl/generate.h | 173 |
1 files changed, 173 insertions, 0 deletions
diff --git a/protocols/Telegram/tgl/generate.h b/protocols/Telegram/tgl/generate.h new file mode 100644 index 0000000000..5d46a6c4ec --- /dev/null +++ b/protocols/Telegram/tgl/generate.h @@ -0,0 +1,173 @@ +/* + This file is part of tgl-libary/generate + + Tgl-library/generate is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + Tgl-library/generate is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this tgl-library/generate. If not, see <http://www.gnu.org/licenses/>. + + Copyright Vitaly Valtman 2014-2015 + + It is derivative work of VK/KittenPHP-DB-Engine (https://github.com/vk-com/kphp-kdb/) + Copyright 2012-2013 Vkontakte Ltd + 2012-2013 Vitaliy Valtman +*/ + +#ifndef __GENERATE_H__ +#define __GENERATE_H__ + +struct tl_combinator; + +struct tl_type { +// struct tl_type_methods *methods; + char *id; + char *print_id; + unsigned name; + int arity; + int flags; + int constructors_num; + struct tl_combinator **constructors; + long long params_types; + int extra; +}; + +#define NODE_TYPE_TYPE 1 +#define NODE_TYPE_NAT_CONST 2 +#define NODE_TYPE_VAR_TYPE 3 +#define NODE_TYPE_VAR_NUM 4 +#define NODE_TYPE_ARRAY 5 + +#define MAX_COMBINATOR_VARS 64 + +#define NAME_VAR_NUM 0x70659eff +#define NAME_VAR_TYPE 0x2cecf817 +#define NAME_INT 0xa8509bda +#define NAME_LONG 0x22076cba +#define NAME_DOUBLE 0x2210c154 +#define NAME_STRING 0xb5286e24 +#define NAME_VECTOR 0x1cb5c415 +#define NAME_MAYBE_TRUE 0x3f9c8ef8 +#define NAME_MAYBE_FALSE 0x27930a7b +#define NAME_BOOL_FALSE 0xbc799737 +#define NAME_BOOL_TRUE 0x997275b5 +#define NAME_BYTES 0x0ee1379f + + +#define FLAG_OPT_VAR (1 << 17) +#define FLAG_EXCL (1 << 18) +#define FLAG_OPT_FIELD (1 << 20) +#define FLAG_NOVAR (1 << 21) +#define FLAG_BARE 1 +#define FLAGS_MASK ((1 << 16) - 1) +#define FLAG_DEFAULT_CONSTRUCTOR (1 << 25) +#define FLAG_NOCONS (1 << 1) + +extern struct tl_tree_methods tl_nat_const_methods; +extern struct tl_tree_methods tl_nat_const_full_methods; +extern struct tl_tree_methods tl_pnat_const_full_methods; +extern struct tl_tree_methods tl_array_methods; +extern struct tl_tree_methods tl_type_methods; +extern struct tl_tree_methods tl_parray_methods; +extern struct tl_tree_methods tl_ptype_methods; +extern struct tl_tree_methods tl_var_num_methods; +extern struct tl_tree_methods tl_var_type_methods; +extern struct tl_tree_methods tl_pvar_num_methods; +extern struct tl_tree_methods tl_pvar_type_methods; +#define TL_IS_NAT_VAR(x) (((long)x) & 1) +#define TL_TREE_METHODS(x) (TL_IS_NAT_VAR (x) ? &tl_nat_const_methods : ((struct tl_tree *)(x))->methods) + +#define DEC_REF(x) (TL_TREE_METHODS(x)->dec_ref ((void *)x)) +#define INC_REF(x) (TL_TREE_METHODS(x)->inc_ref ((void *)x)) +#define TYPE(x) (TL_TREE_METHODS(x)->type ((void *)x)) + +typedef unsigned long long tl_tree_hash_t; +struct tl_tree; + +struct tl_tree_methods { + int (*type)(struct tl_tree *T); + int (*eq)(struct tl_tree *T, struct tl_tree *U); + void (*inc_ref)(struct tl_tree *T); + void (*dec_ref)(struct tl_tree *T); +}; + +struct tl_tree { + int ref_cnt; + int flags; + //tl_tree_hash_t hash; + struct tl_tree_methods *methods; +}; +/* +struct tl_tree_nat_const { + struct tl_tree self; + int value; +};*/ + +struct tl_tree_type { + struct tl_tree self; + + struct tl_type *type; + int children_num; + struct tl_tree **children; +}; + +struct tl_tree_array { + struct tl_tree self; + + struct tl_tree *multiplicity; + int args_num; + struct arg **args; +}; + +struct tl_tree_var_type { + struct tl_tree self; + + int var_num; +}; + +struct tl_tree_var_num { + struct tl_tree self; + + int var_num; + int dif; +}; + +struct tl_tree_nat_const { + struct tl_tree self; + + long long value; +}; + +struct arg { + char *id; + int var_num; + int flags; + int exist_var_num; + int exist_var_bit; + struct tl_tree *type; +}; + +struct tl_combinator { + //struct tl_combinator_methods *methods; + char *id; + char *print_id; + unsigned name; + int is_fun; + int var_num; + int args_num; + struct arg **args; + struct tl_tree *result; + void **IP; + void **fIP; + int IP_len; + int fIP_len; +}; + +#endif |