summaryrefslogtreecommitdiff
path: root/src/stage4/lib
diff options
context:
space:
mode:
Diffstat (limited to 'src/stage4/lib')
-rw-r--r--src/stage4/lib/native_ptr.js65
1 files changed, 65 insertions, 0 deletions
diff --git a/src/stage4/lib/native_ptr.js b/src/stage4/lib/native_ptr.js
new file mode 100644
index 0000000..4dcbfeb
--- /dev/null
+++ b/src/stage4/lib/native_ptr.js
@@ -0,0 +1,65 @@
+class native_ptr {
+// constructor(addy, size = 4, buf_to_obj = u8x4_to_u32) {
+ constructor() {
+ this.addy = arguments[0];
+ var our_proto = Object.getPrototypeOf(this);
+
+ p0laris_log(JSON.stringify(Object.getPrototypeOf(this)));
+
+ if (our_proto.predef == true) {
+ p0laris_log("lol");
+ this.size = our_proto.size;
+ this.buf_to_obj = our_proto.buf_to_obj;
+ this.obj_to_buf = our_proto.obj_to_buf;
+ return;
+ }
+
+ this.size = arguments[1];
+ this.buf_to_obj = arguments[2];
+ this.obj_to_buf = arguments[3];
+
+ if (this.size === undefined) {
+ this.size = 4;
+ }
+
+ if (this.buf_to_obj === undefined) {
+ this.buf_to_obj = u8x4_to_u32;
+ }
+ if (this.obj_to_buf === undefined) {
+ this.obj_to_buf = u32_to_u8x4;
+ }
+ }
+
+ deref() {
+ var n = arguments[0];
+ if (n === undefined) {
+ n = 0;
+ }
+
+ return this.buf_to_obj(read_buf(this.addy + (n * this.size), this.size));
+ }
+
+ write() {
+ var v = arguments[0];
+
+ var n = arguments[1];
+ if (n === undefined) {
+ n = 0;
+ }
+
+ write_buf(this.addy + (n * this.size), this.obj_to_buf(v), this.size);
+ }
+}
+
+function native_ptr_type(size, buf_to_obj, obj_to_buf) {
+ class ret extends native_ptr {
+
+ }
+
+ ret.prototype.predef = true;
+ ret.prototype.size = size;
+ ret.prototype.buf_to_obj = buf_to_obj;
+ ret.prototype.obj_to_buf = obj_to_buf;
+
+ return ret;
+} \ No newline at end of file