summaryrefslogtreecommitdiffstats
path: root/debian/vendor-h2o/deps/mruby/include/mruby/istruct.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--debian/vendor-h2o/deps/mruby/include/mruby/istruct.h47
1 files changed, 47 insertions, 0 deletions
diff --git a/debian/vendor-h2o/deps/mruby/include/mruby/istruct.h b/debian/vendor-h2o/deps/mruby/include/mruby/istruct.h
new file mode 100644
index 0000000..4d2393c
--- /dev/null
+++ b/debian/vendor-h2o/deps/mruby/include/mruby/istruct.h
@@ -0,0 +1,47 @@
+/*
+** mruby/istruct.h - Inline structures
+**
+** See Copyright Notice in mruby.h
+*/
+
+#ifndef MRUBY_ISTRUCT_H
+#define MRUBY_ISTRUCT_H
+
+#include "common.h"
+#include <string.h>
+
+/**
+ * Inline structures that fit in RVALUE
+ *
+ * They cannot have finalizer, and cannot have instance variables.
+ */
+MRB_BEGIN_DECL
+
+#define ISTRUCT_DATA_SIZE (sizeof(void*) * 3)
+
+struct RIstruct {
+ MRB_OBJECT_HEADER;
+ char inline_data[ISTRUCT_DATA_SIZE];
+};
+
+#define RISTRUCT(obj) ((struct RIstruct*)(mrb_ptr(obj)))
+#define ISTRUCT_PTR(obj) (RISTRUCT(obj)->inline_data)
+
+MRB_INLINE mrb_int mrb_istruct_size()
+{
+ return ISTRUCT_DATA_SIZE;
+}
+
+MRB_INLINE void* mrb_istruct_ptr(mrb_value object)
+{
+ return ISTRUCT_PTR(object);
+}
+
+MRB_INLINE void mrb_istruct_copy(mrb_value dest, mrb_value src)
+{
+ memcpy(ISTRUCT_PTR(dest), ISTRUCT_PTR(src), ISTRUCT_DATA_SIZE);
+}
+
+MRB_END_DECL
+
+#endif /* MRUBY_ISTRUCT_H */