Initial import of prototype.
2 * Copyright (C) 2012 David Anderson
4 * This file is part of JITCraft.
6 * JITCraft is free software: you can redistribute it and/or modify it under
7 * the terms of the GNU General Public License as published by the Free
8 * Software Foundation, either version 3 of the License, or (at your option)
11 * Foobar is distributed in the hope that it will be useful, but WITHOUT ANY
12 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License along with
16 * JITCraft. If not, see http://www.gnu.org/licenses/.
18 #ifndef _include_jc_unsafe_array_
19 #define _include_jc_unsafe_array_
29 return *(reinterpret_cast<unsigned *>(this) - 1);
32 unsigned *uint32Vector() {
33 return reinterpret_cast<unsigned *>(this);
36 return reinterpret_cast<int *>(this);
38 int readInt32(size_t index) {
39 assert(index < length());
40 return int32Vector()[index];
42 void writeInt32(size_t index, int value) {
43 assert(index < length());
44 int32Vector()[index] = value;
46 UnsafeArray *indirect(size_t index) {
47 assert(index < length());
48 unsigned *address = uint32Vector() + index;
49 return reinterpret_cast<UnsafeArray *>(reinterpret_cast<char *>(address) + *address);
51 void *allocationBase() {
52 return reinterpret_cast<unsigned *>(this) - 1;
58 #endif // _include_jc_unsafe_array_