Dynamic ArrayBase::__Field(const String &inString, hx::PropertyAccess inCallProp) { if (inString==HX_CSTRING("length")) return Dynamic((int)size()); if (inString==HX_CSTRING("concat")) return concat_dyn(); if (inString==HX_CSTRING("insert")) return insert_dyn(); if (inString==HX_CSTRING("copy")) return copy_dyn(); if (inString==HX_CSTRING("iterator")) return iterator_dyn(); if (inString==HX_CSTRING("join")) return join_dyn(); if (inString==HX_CSTRING("pop")) return pop_dyn(); if (inString==HX_CSTRING("push")) return push_dyn(); if (inString==HX_CSTRING("remove")) return remove_dyn(); if (inString==HX_CSTRING("indexOf")) return indexOf_dyn(); if (inString==HX_CSTRING("lastIndexOf")) return lastIndexOf_dyn(); if (inString==HX_CSTRING("reverse")) return reverse_dyn(); if (inString==HX_CSTRING("shift")) return shift_dyn(); if (inString==HX_CSTRING("splice")) return splice_dyn(); if (inString==HX_CSTRING("slice")) return slice_dyn(); if (inString==HX_CSTRING("sort")) return sort_dyn(); if (inString==HX_CSTRING("toString")) return toString_dyn(); if (inString==HX_CSTRING("unshift")) return unshift_dyn(); if (inString==HX_CSTRING("filter")) return filter_dyn(); if (inString==HX_CSTRING("map")) return map_dyn(); if (inString==HX_CSTRING("__SetSize")) return __SetSize_dyn(); if (inString==HX_CSTRING("__SetSizeExact")) return __SetSizeExact_dyn(); if (inString==HX_CSTRING("__unsafe_get")) return __unsafe_get_dyn(); if (inString==HX_CSTRING("__unsafe_set")) return __unsafe_set_dyn(); if (inString==HX_CSTRING("blit")) return blit_dyn(); if (inString==HX_CSTRING("zero")) return zero_dyn(); if (inString==HX_CSTRING("memcmp")) return memcmp_dyn(); return null(); }
Dynamic ArrayBase::__Field(const String &inString, bool inCallProp) { if (inString==HX_CSTRING("length")) return Dynamic((int)size()); if (inString==HX_CSTRING("concat")) return concat_dyn(); if (inString==HX_CSTRING("insert")) return insert_dyn(); if (inString==HX_CSTRING("copy")) return copy_dyn(); if (inString==HX_CSTRING("iterator")) return iterator_dyn(); if (inString==HX_CSTRING("join")) return join_dyn(); if (inString==HX_CSTRING("pop")) return pop_dyn(); if (inString==HX_CSTRING("push")) return push_dyn(); if (inString==HX_CSTRING("remove")) return remove_dyn(); if (inString==HX_CSTRING("reverse")) return reverse_dyn(); if (inString==HX_CSTRING("shift")) return shift_dyn(); if (inString==HX_CSTRING("splice")) return splice_dyn(); if (inString==HX_CSTRING("slice")) return slice_dyn(); if (inString==HX_CSTRING("sort")) return sort_dyn(); if (inString==HX_CSTRING("toString")) return toString_dyn(); if (inString==HX_CSTRING("unshift")) return unshift_dyn(); if (inString==HX_CSTRING("filter")) return filter_dyn(); if (inString==HX_CSTRING("map")) return map_dyn(); return null(); }
/* * Allocate space in the dynamic pool */ CVmPoolDynObj *CVmPoolInMem::dynpool_alloc(size_t len) { CVmPoolDynObj *cur; /* * if the requested size exceeds the page size, we can't allocate * it, since each request must fit within a single page */ if (len > page_size_) return 0; /* * First, see if we can find a free pool object that we've already * allocated that will fill the request */ for (cur = dyn_head_ ; cur != 0 ; cur = cur->get_next()) { /* if this object is free, and it's big enough, use it */ if (cur->is_free() && cur->get_len() >= len) { /* * if this object is at least a little bigger than the * request, create a new object to hold the balance of this * object, so that the balance can be allocated separately */ if (cur->get_len() > len + 63) { CVmPoolDynObj *new_obj; /* * create a new object, using the space remaining in the * old object after the requested amount of space */ new_obj = new CVmPoolDynObj(cur->get_ofs() + len, cur->get_len() - len); /* reduce the old object to the requested size */ cur->set_len(len); /* link the new object in after the old object */ insert_dyn(cur, new_obj); /* the new object is free */ new_obj->set_free(TRUE); } /* this object is now in use */ cur->set_free(FALSE); /* return the object we found */ return cur; } } /* * We didn't find any free memory in any existing pages where we * could fill the request. So, we must allocate a new page. First, * allocate a new page slot. */ alloc_page_slots(page_slots_ + 1); /* allocate space for the page data */ pages_[page_slots_ - 1].mem = (char *)t3malloc(page_size_); /* * if the requested size wouldn't leave much additional space on the * page, simply give the entire page to the new object */ if (len + 63 >= page_size_) len = page_size_; /* create a new dynamic pool handle for the new object */ cur = new CVmPoolDynObj(get_page_start_ofs(page_slots_ - 1), len); /* link it in at the end of the list */ append_dyn(cur); /* * if there's any space left over, create yet another object to * cover the free space remaining on the page */ if (len < page_size_) { CVmPoolDynObj *f; /* create a new dynamic pool handle for the new object */ f = new CVmPoolDynObj(get_page_start_ofs(page_slots_ - 1) + len, page_size_ - len); /* mark it as free */ f->set_free(TRUE); /* link it in at the end of the list */ append_dyn(f); } /* return the new object */ return cur; }