summaryrefslogtreecommitdiff
path: root/protocols/Telegram/tgl/generate.h
diff options
context:
space:
mode:
Diffstat (limited to 'protocols/Telegram/tgl/generate.h')
-rw-r--r--protocols/Telegram/tgl/generate.h173
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