]> gitweb.factorcode.org Git - factor.git/commitdiff
added byte_arrays fns to vm
authorPhil Dawes <phil@phildawes.net>
Mon, 17 Aug 2009 20:37:06 +0000 (21:37 +0100)
committerPhil Dawes <phil@phildawes.net>
Wed, 16 Sep 2009 07:16:19 +0000 (08:16 +0100)
vm/byte_arrays.cpp
vm/vm.hpp

index 2eda3f33c4741042cacae235641a0bfcb0614213..495e5211a7c913fc7bacc3fe714760baedce2f30 100644 (file)
@@ -3,32 +3,52 @@
 namespace factor
 {
 
-byte_array *allot_byte_array(cell size)
+byte_array *factorvm::allot_byte_array(cell size)
 {
        byte_array *array = allot_array_internal<byte_array>(size);
        memset(array + 1,0,size);
        return array;
 }
 
-PRIMITIVE(byte_array)
+byte_array *allot_byte_array(cell size)
+{
+       return vm->allot_byte_array(size);
+}
+
+inline void factorvm::vmprim_byte_array()
 {
        cell size = unbox_array_size();
        dpush(tag<byte_array>(allot_byte_array(size)));
 }
 
-PRIMITIVE(uninitialized_byte_array)
+PRIMITIVE(byte_array)
+{
+       PRIMITIVE_GETVM()->vmprim_byte_array();
+}
+
+inline void factorvm::vmprim_uninitialized_byte_array()
 {
        cell size = unbox_array_size();
        dpush(tag<byte_array>(allot_array_internal<byte_array>(size)));
 }
 
-PRIMITIVE(resize_byte_array)
+PRIMITIVE(uninitialized_byte_array)
+{
+       PRIMITIVE_GETVM()->vmprim_uninitialized_byte_array();
+}
+
+inline void factorvm::vmprim_resize_byte_array()
 {
        byte_array *array = untag_check<byte_array>(dpop());
        cell capacity = unbox_array_size();
        dpush(tag<byte_array>(reallot_array(array,capacity)));
 }
 
+PRIMITIVE(resize_byte_array)
+{
+       PRIMITIVE_GETVM()->vmprim_resize_byte_array();
+}
+
 void growable_byte_array::append_bytes(void *elts, cell len)
 {
        cell new_size = count + len;
index fbdfe125d3097298a658934a33b0861ec0a807dd..8e8d8bb9b874bf2c1979997bddaace30cafab196 100644 (file)
--- a/vm/vm.hpp
+++ b/vm/vm.hpp
@@ -225,6 +225,12 @@ struct factorvm {
        //booleans
        void box_boolean(bool value);
        bool to_boolean(cell value);
+
+       //byte arrays
+       byte_array *allot_byte_array(cell size);
+       inline void vmprim_byte_array();
+       inline void vmprim_uninitialized_byte_array();
+       inline void vmprim_resize_byte_array();
        // next method here: