var.h 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. #ifndef VIRTUALMATH_VAR_H
  2. #define VIRTUALMATH_VAR_H
  3. #define MAX_SIZE (8)
  4. struct Var{
  5. GCStatus gc_status;
  6. wchar_t *name;
  7. struct LinkValue *value;
  8. struct LinkValue *name_;
  9. struct Var *next;
  10. struct Var *gc_next;
  11. struct Var *gc_last;
  12. };
  13. struct HashTable{
  14. GCStatus gc_status;
  15. struct Var **hashtable;
  16. struct HashTable *gc_next;
  17. struct HashTable *gc_last;
  18. };
  19. struct DefaultVar{
  20. wchar_t *name;
  21. vint times;
  22. struct DefaultVar *next;
  23. };
  24. struct VarList{
  25. struct HashTable *hashtable;
  26. struct DefaultVar *default_var;
  27. struct VarList *next;
  28. };
  29. enum VarOperation {
  30. get_var,
  31. read_var,
  32. del_var,
  33. };
  34. typedef struct Var Var;
  35. typedef struct HashTable HashTable;
  36. typedef struct DefaultVar DefaultVar;
  37. typedef struct VarList VarList;
  38. typedef enum VarOperation VarOperation;
  39. Var *makeVar(wchar_t *name, LinkValue *value, LinkValue *name_, Inter *inter);
  40. void freeVar(Var **var);
  41. HashTable *makeHashTable(Inter *inter);
  42. void freeHashTable(HashTable **value);
  43. VarList *makeVarList(Inter *inter, bool make_hash);
  44. VarList *freeVarList(VarList *vl);
  45. vhashn time33(wchar_t *key);
  46. LinkValue *findVar(wchar_t *name, VarOperation operating, Inter *inter, HashTable *ht);
  47. LinkValue *findFromVarList(wchar_t *name, vint times, VarOperation operating, FUNC_CORE);
  48. void addVar(wchar_t *name, LinkValue *value, LinkValue *name_, Inter *inter, HashTable *ht);
  49. void updateHashTable(HashTable *update, HashTable *new, Inter *inter);
  50. void addFromVarList(wchar_t *name, LinkValue *name_, vint times, LinkValue *value, FUNC_CORE);
  51. VarList *pushVarList(VarList *base, Inter *inter);
  52. VarList *popVarList(VarList *base);
  53. VarList *copyVarListCore(VarList *base, Inter *inter);
  54. VarList *copyVarList(VarList *base, bool n_new, Inter *inter);
  55. VarList *connectVarListBack(VarList *base, VarList *back);
  56. bool comparVarList(VarList *dest, VarList *src);
  57. VarList *makeObjectVarList(Inherit *value, Inter *inter, VarList *base);
  58. vint findDefault(DefaultVar *base, wchar_t *name);
  59. DefaultVar *connectDefaultVar(DefaultVar *base, wchar_t *name, vint times);
  60. DefaultVar *freeDefaultVar(DefaultVar *dv);
  61. DefaultVar *makeDefaultVar(wchar_t *name, vint times);
  62. #endif //VIRTUALMATH_VAR_H