From 2e129dfc453096063f5e8a0a867fa1642756a9ed Mon Sep 17 00:00:00 2001 From: Phil Dawes Date: Mon, 17 Aug 2009 21:37:11 +0100 Subject: [PATCH] moved generic_arrays inline functions to vm.hpp --- vm/generic_arrays.hpp | 47 ----------------------------------------- vm/master.hpp | 2 +- vm/vm.hpp | 49 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 50 insertions(+), 48 deletions(-) diff --git a/vm/generic_arrays.hpp b/vm/generic_arrays.hpp index e134b1a2ad..0125cb7651 100644 --- a/vm/generic_arrays.hpp +++ b/vm/generic_arrays.hpp @@ -19,51 +19,4 @@ template cell array_size(T *array) return array_size(array_capacity(array)); } -template T *factorvm::allot_array_internal(cell capacity) -{ - T *array = allot(array_size(capacity)); - array->capacity = tag_fixnum(capacity); - return array; -} - -template T *allot_array_internal(cell capacity) -{ - return vm->allot_array_internal(capacity); -} - -template bool factorvm::reallot_array_in_place_p(T *array, cell capacity) -{ - return in_zone(&nursery,array) && capacity <= array_capacity(array); -} - -template bool reallot_array_in_place_p(T *array, cell capacity) -{ - return vm->reallot_array_in_place_p(array,capacity); -} - -template TYPE *factorvm::reallot_array(TYPE *array_, cell capacity) -{ - gc_root array(array_,this); - - if(reallot_array_in_place_p(array.untagged(),capacity)) - { - array->capacity = tag_fixnum(capacity); - return array.untagged(); - } - else - { - cell to_copy = array_capacity(array.untagged()); - if(capacity < to_copy) - to_copy = capacity; - - TYPE *new_array = allot_array_internal(capacity); - - memcpy(new_array + 1,array.untagged() + 1,to_copy * TYPE::element_size); - memset((char *)(new_array + 1) + to_copy * TYPE::element_size, - 0,(capacity - to_copy) * TYPE::element_size); - - return new_array; - } -} - } diff --git a/vm/master.hpp b/vm/master.hpp index 7b3d6c5c73..c25cbdc3a6 100755 --- a/vm/master.hpp +++ b/vm/master.hpp @@ -51,8 +51,8 @@ #include "write_barrier.hpp" #include "data_gc.hpp" #include "local_roots.hpp" -#include "vm.hpp" #include "generic_arrays.hpp" +#include "vm.hpp" #include "debug.hpp" #include "arrays.hpp" #include "strings.hpp" diff --git a/vm/vm.hpp b/vm/vm.hpp index f44c1ca0eb..8e0c583c5e 100644 --- a/vm/vm.hpp +++ b/vm/vm.hpp @@ -853,6 +853,55 @@ struct gc_bignum }; #define GC_BIGNUM(x,vm) gc_bignum x##__gc_root(&x,vm) + +//generic_arrays.hpp +template T *factorvm::allot_array_internal(cell capacity) +{ + T *array = allot(array_size(capacity)); + array->capacity = tag_fixnum(capacity); + return array; +} + +template T *allot_array_internal(cell capacity) +{ + return vm->allot_array_internal(capacity); +} + +template bool factorvm::reallot_array_in_place_p(T *array, cell capacity) +{ + return in_zone(&nursery,array) && capacity <= array_capacity(array); +} + +template bool reallot_array_in_place_p(T *array, cell capacity) +{ + return vm->reallot_array_in_place_p(array,capacity); +} + +template TYPE *factorvm::reallot_array(TYPE *array_, cell capacity) +{ + gc_root array(array_,this); + + if(reallot_array_in_place_p(array.untagged(),capacity)) + { + array->capacity = tag_fixnum(capacity); + return array.untagged(); + } + else + { + cell to_copy = array_capacity(array.untagged()); + if(capacity < to_copy) + to_copy = capacity; + + TYPE *new_array = allot_array_internal(capacity); + + memcpy(new_array + 1,array.untagged() + 1,to_copy * TYPE::element_size); + memset((char *)(new_array + 1) + to_copy * TYPE::element_size, + 0,(capacity - to_copy) * TYPE::element_size); + + return new_array; + } +} + // next method here: