gravity_vm.h 5.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. //
  2. // gravity_vm.h
  3. // gravity
  4. //
  5. // Created by Marco Bambini on 11/11/14.
  6. // Copyright (c) 2014 CreoLabs. All rights reserved.
  7. //
  8. #ifndef __GRAVITY_VM__
  9. #define __GRAVITY_VM__
  10. #include "gravity_delegate.h"
  11. #include "gravity_value.h"
  12. #ifdef __cplusplus
  13. extern "C" {
  14. #endif
  15. #define GRAVITY_VM_GCENABLED "gcEnabled"
  16. #define GRAVITY_VM_GCMINTHRESHOLD "gcMinThreshold"
  17. #define GRAVITY_VM_GCTHRESHOLD "gcThreshold"
  18. #define GRAVITY_VM_GCRATIO "gcRatio"
  19. #define GRAVITY_VM_MAXCALLS "maxCCalls"
  20. #define GRAVITY_VM_MAXBLOCK "maxBlock"
  21. #define GRAVITY_VM_MAXRECURSION "maxRecursionDepth"
  22. typedef bool (*vm_filter_cb) (gravity_object_t *obj);
  23. typedef void (*vm_transfer_cb) (gravity_vm *vm, gravity_object_t *obj);
  24. typedef void (*vm_cleanup_cb) (gravity_vm *vm);
  25. GRAVITY_API gravity_vm *gravity_vm_new (gravity_delegate_t *delegate);
  26. GRAVITY_API gravity_vm *gravity_vm_newmini (void);
  27. GRAVITY_API void gravity_vm_set_callbacks (gravity_vm *vm, vm_transfer_cb vm_transfer, vm_cleanup_cb vm_cleanup);
  28. GRAVITY_API void gravity_vm_free (gravity_vm *vm);
  29. GRAVITY_API void gravity_vm_reset (gravity_vm *vm);
  30. GRAVITY_API bool gravity_vm_runclosure (gravity_vm *vm, gravity_closure_t *closure, gravity_value_t sender, gravity_value_t params[], uint16_t nparams);
  31. GRAVITY_API bool gravity_vm_runmain (gravity_vm *vm, gravity_closure_t *closure);
  32. GRAVITY_API void gravity_vm_loadclosure (gravity_vm *vm, gravity_closure_t *closure);
  33. GRAVITY_API void gravity_vm_setvalue (gravity_vm *vm, const char *key, gravity_value_t value);
  34. GRAVITY_API gravity_value_t gravity_vm_lookup (gravity_vm *vm, gravity_value_t key);
  35. GRAVITY_API gravity_value_t gravity_vm_getvalue (gravity_vm *vm, const char *key, uint32_t keylen);
  36. GRAVITY_API double gravity_vm_time (gravity_vm *vm);
  37. GRAVITY_API gravity_value_t gravity_vm_result (gravity_vm *vm);
  38. GRAVITY_API gravity_delegate_t *gravity_vm_delegate (gravity_vm *vm);
  39. GRAVITY_API gravity_fiber_t *gravity_vm_fiber (gravity_vm *vm);
  40. GRAVITY_API void gravity_vm_setfiber(gravity_vm* vm, gravity_fiber_t *fiber);
  41. GRAVITY_API void gravity_vm_seterror (gravity_vm *vm, const char *format, ...);
  42. GRAVITY_API void gravity_vm_seterror_string (gravity_vm* vm, const char *s);
  43. GRAVITY_API bool gravity_vm_ismini (gravity_vm *vm);
  44. GRAVITY_API gravity_value_t gravity_vm_keyindex (gravity_vm *vm, uint32_t index);
  45. GRAVITY_API bool gravity_vm_isaborted (gravity_vm *vm);
  46. GRAVITY_API void gravity_vm_setaborted (gravity_vm *vm);
  47. GRAVITY_API gravity_closure_t *gravity_vm_getclosure (gravity_vm *vm);
  48. GRAVITY_API void gravity_gray_value (gravity_vm* vm, gravity_value_t v);
  49. GRAVITY_API void gravity_gray_object (gravity_vm* vm, gravity_object_t *obj);
  50. GRAVITY_API void gravity_gc_start (gravity_vm* vm);
  51. GRAVITY_API void gravity_gc_setenabled (gravity_vm* vm, bool enabled);
  52. GRAVITY_API void gravity_gc_temppush (gravity_vm *vm, gravity_object_t *obj);
  53. GRAVITY_API void gravity_gc_temppop (gravity_vm *vm);
  54. GRAVITY_API void gravity_gc_tempnull (gravity_vm *vm, gravity_object_t *obj);
  55. GRAVITY_API void gravity_gc_setvalues (gravity_vm *vm, gravity_int_t threshold, gravity_int_t minthreshold, gravity_float_t ratio);
  56. GRAVITY_API void gravity_vm_transfer (gravity_vm* vm, gravity_object_t *obj);
  57. GRAVITY_API void gravity_vm_cleanup (gravity_vm* vm);
  58. GRAVITY_API void gravity_vm_filter (gravity_vm* vm, vm_filter_cb cleanup_filter);
  59. GRAVITY_API gravity_closure_t *gravity_vm_loadfile (gravity_vm *vm, const char *path);
  60. GRAVITY_API gravity_closure_t *gravity_vm_loadbuffer (gravity_vm *vm, const char *buffer, size_t len);
  61. GRAVITY_API void gravity_vm_initmodule (gravity_vm *vm, gravity_function_t *f);
  62. GRAVITY_API gravity_closure_t *gravity_vm_fastlookup (gravity_vm *vm, gravity_class_t *c, int index);
  63. GRAVITY_API void gravity_vm_setslot (gravity_vm *vm, gravity_value_t value, uint32_t index);
  64. GRAVITY_API gravity_value_t gravity_vm_getslot (gravity_vm *vm, uint32_t index);
  65. GRAVITY_API void gravity_vm_setdata (gravity_vm *vm, void *data);
  66. GRAVITY_API void *gravity_vm_getdata (gravity_vm *vm);
  67. GRAVITY_API void gravity_vm_memupdate (gravity_vm *vm, gravity_int_t value);
  68. GRAVITY_API gravity_int_t gravity_vm_maxmemblock (gravity_vm *vm);
  69. GRAVITY_API gravity_value_t gravity_vm_get (gravity_vm *vm, const char *key);
  70. GRAVITY_API bool gravity_vm_set (gravity_vm *vm, const char *key, gravity_value_t value);
  71. GRAVITY_API char *gravity_vm_anonymous (gravity_vm *vm);
  72. GRAVITY_API bool gravity_isopt_class (gravity_class_t *c);
  73. GRAVITY_API void gravity_opt_register (gravity_vm *vm);
  74. GRAVITY_API void gravity_opt_free (void);
  75. #ifdef __cplusplus
  76. }
  77. #endif
  78. #endif