Mercurial > repos > rhope
annotate runtime/array.c @ 104:2d2da148d844
Performance improvement for string comparisons
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Wed, 25 Aug 2010 03:19:57 +0000 |
parents | 7428aa5d6ade |
children | 439db471f595 |
rev | line source |
---|---|
49
3e20ed8959c4
Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
1 #include "integer.h" |
78
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
53
diff
changeset
|
2 #include "object.h" |
97 | 3 #include <stdio.h> |
78
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
53
diff
changeset
|
4 |
49
3e20ed8959c4
Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
5 void _internal_array_copyout(object * array, int32_t index, object * dest) |
3e20ed8959c4
Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
6 { |
3e20ed8959c4
Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
7 t_Array * arr = (t_Array *)array; |
3e20ed8959c4
Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
8 memcpy(((char *)dest) + sizeof(object), ((char *)array) + sizeof(t_Array) + arr->payload.Eltype->bp->size * index, get_blueprint(dest)->size); |
78
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
53
diff
changeset
|
9 get_blueprint(dest)->copy(dest); |
103
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
10 release_ref(array); |
49
3e20ed8959c4
Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
11 } |
3e20ed8959c4
Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
12 |
3e20ed8959c4
Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
13 void _internal_array_copyin(object * array, int32_t index, object * val) |
3e20ed8959c4
Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
14 { |
3e20ed8959c4
Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
15 t_Array * arr = (t_Array *)array; |
3e20ed8959c4
Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
16 memcpy(((char *)array) + sizeof(t_Array) + arr->payload.Eltype->bp->size * index, ((char *)val) + sizeof(object), arr->payload.Eltype->bp->size); |
78
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
53
diff
changeset
|
17 get_blueprint(val)->copy(val); |
103
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
18 release_ref(val); |
49
3e20ed8959c4
Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
19 } |
3e20ed8959c4
Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
20 |
3e20ed8959c4
Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
21 object * _internal_array_getboxed(object * array, int32_t index) |
3e20ed8959c4
Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
22 { |
3e20ed8959c4
Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
23 object * ret; |
96
5a08705f7610
Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
24 object ** intarr = (object **)(((char *) array) + sizeof(t_BoxedSP_Array)); |
49
3e20ed8959c4
Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
25 ret = add_ref(intarr[index]); |
3e20ed8959c4
Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
26 release_ref(array); |
3e20ed8959c4
Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
27 return ret; |
3e20ed8959c4
Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
28 } |
3e20ed8959c4
Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
29 |
3e20ed8959c4
Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
30 void _internal_array_setboxed(object *array, int32_t index, object * val) |
3e20ed8959c4
Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
31 { |
96
5a08705f7610
Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
32 object ** intarr = (object **)(((char *) array) + sizeof(t_BoxedSP_Array)); |
49
3e20ed8959c4
Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
33 intarr[index] = val; |
3e20ed8959c4
Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
34 } |
3e20ed8959c4
Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
35 |
3e20ed8959c4
Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
36 object *_internal_array_allocboxed(int32_t size) |
3e20ed8959c4
Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
37 { |
96
5a08705f7610
Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
38 t_BoxedSP_Array * ret = (t_BoxedSP_Array *)new_multisize(TYPE_BOXEDARRAY, sizeof(nt_BoxedSP_Array)+sizeof(object *)*size); |
49
3e20ed8959c4
Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
39 ret->payload.Length = 0; |
3e20ed8959c4
Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
40 ret->payload.Storage = size; |
96
5a08705f7610
Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
41 |
5a08705f7610
Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
42 return (object *)ret; |
5a08705f7610
Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
43 } |
5a08705f7610
Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
44 |
5a08705f7610
Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
45 object *_internal_array_allocboxedcopy(object * osource, int32_t size) |
5a08705f7610
Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
46 { |
5a08705f7610
Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
47 int32_t tocopy,idx; |
5a08705f7610
Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
48 object **srcarr, **destarr; |
5a08705f7610
Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
49 t_BoxedSP_Array * source = (t_BoxedSP_Array *)osource; |
5a08705f7610
Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
50 t_BoxedSP_Array * ret = (t_BoxedSP_Array *)new_multisize(TYPE_BOXEDARRAY, sizeof(nt_BoxedSP_Array)+sizeof(object *)*size); |
5a08705f7610
Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
51 ret->payload.Length = 0; |
5a08705f7610
Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
52 ret->payload.Storage = size; |
5a08705f7610
Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
53 tocopy = size < source->payload.Length ? size : source->payload.Length; |
5a08705f7610
Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
54 srcarr = (object **)(source+1); |
5a08705f7610
Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
55 destarr = (object **)(ret+1); |
5a08705f7610
Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
56 for(idx = 0; idx < tocopy; ++idx) |
103
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
57 destarr[idx] = add_ref(srcarr[idx]); |
96
5a08705f7610
Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
58 release_ref(osource); |
49
3e20ed8959c4
Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
59 |
53
70af7fa155d0
Cleaned up some C warnings and added a simple compile script
Mike Pavone <pavone@retrodev.com>
parents:
49
diff
changeset
|
60 return (object *)ret; |
49
3e20ed8959c4
Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
61 } |
3e20ed8959c4
Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
62 |
3e20ed8959c4
Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
63 object * _internal_array_allocnaked(int32_t size , object * type) |
3e20ed8959c4
Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
64 { |
3e20ed8959c4
Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
65 t_Array * ret; |
3e20ed8959c4
Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
66 t_Blueprint * bp = (t_Blueprint *)type; |
3e20ed8959c4
Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
67 if (bp->bp->size < 0) { |
96
5a08705f7610
Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
68 release_ref(type); |
49
3e20ed8959c4
Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
69 return _internal_array_allocboxed(size); |
3e20ed8959c4
Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
70 } |
3e20ed8959c4
Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
71 ret = (t_Array *)new_multisize(TYPE_ARRAY, sizeof(nt_Array)+bp->bp->size*size); |
3e20ed8959c4
Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
72 ret->payload.Length = 0; |
3e20ed8959c4
Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
73 ret->payload.Storage = size; |
3e20ed8959c4
Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
74 ret->payload.Eltype = bp; |
3e20ed8959c4
Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
75 |
96
5a08705f7610
Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
76 return (object *)ret; |
78
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
53
diff
changeset
|
77 } |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
53
diff
changeset
|
78 |
96
5a08705f7610
Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
79 object * _internal_array_allocnakedcopy(object * osource, int32_t size) |
5a08705f7610
Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
80 { |
5a08705f7610
Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
81 int32_t tocopy,idx; |
97 | 82 char *cur; |
96
5a08705f7610
Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
83 t_Array * ret, *source = (t_Array *)osource; |
5a08705f7610
Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
84 t_Blueprint * bp = source->payload.Eltype; |
5a08705f7610
Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
85 |
5a08705f7610
Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
86 ret = (t_Array *)new_multisize(TYPE_ARRAY, sizeof(nt_Array)+bp->bp->size*size); |
5a08705f7610
Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
87 ret->payload.Length = 0; |
5a08705f7610
Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
88 ret->payload.Storage = size; |
103
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
89 ret->payload.Eltype = bp; |
96
5a08705f7610
Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
90 add_ref((object *)bp); |
5a08705f7610
Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
91 tocopy = size < source->payload.Length ? size : source->payload.Length; |
5a08705f7610
Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
92 memcpy(ret+1, source+1, tocopy*bp->bp->size); |
103
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
93 |
96
5a08705f7610
Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
94 if(bp->bp->type_id >= TYPE_ARRAY) |
5a08705f7610
Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
95 { |
5a08705f7610
Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
96 //Ugly hack |
5a08705f7610
Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
97 cur = ((char *)(ret+1))-sizeof(object) ; |
5a08705f7610
Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
98 for(idx=0; idx < tocopy; ++idx) |
5a08705f7610
Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
99 { |
5a08705f7610
Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
100 bp->bp->copy((object *)cur); |
5a08705f7610
Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
101 cur += bp->bp->size; |
5a08705f7610
Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
102 } |
5a08705f7610
Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
103 } |
5a08705f7610
Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
104 release_ref(osource); |
5a08705f7610
Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
105 |
5a08705f7610
Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
106 return (object *)ret; |
5a08705f7610
Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
107 } |
5a08705f7610
Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
108 |
103
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
109 void internalarrayboxedcopy(object * obj) |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
110 { |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
111 int32_t idx; |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
112 object **elarr; |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
113 t_BoxedSP_Array * arr = (t_BoxedSP_Array *)obj; |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
114 elarr = (object **)(arr+1); |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
115 for(idx = 0; idx < arr->payload.Length; ++idx) |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
116 { |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
117 add_ref(elarr[idx]); |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
118 } |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
119 } |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
120 |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
121 void internalarraynakedcopy(object * obj) |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
122 { |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
123 int32_t tocopy,idx; |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
124 char *cur; |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
125 t_Array *arr = (t_Array *)obj; |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
126 t_Blueprint * bp = arr->payload.Eltype; |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
127 //Lower type IDs don't have any reference params so we can safely skip this for those |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
128 if(bp->bp->type_id >= TYPE_ARRAY) |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
129 { |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
130 //Ugly hack |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
131 cur = ((char *)(arr+1))-sizeof(object) ; |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
132 for(idx=0; idx < arr->payload.Length; ++idx) |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
133 { |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
134 bp->bp->copy((object *)cur); |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
135 cur += bp->bp->size; |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
136 } |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
137 } |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
138 add_ref((object *)bp); |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
139 } |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
140 |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
141 void internalarrayboxedcleanup(object * obj) |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
142 { |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
143 int32_t idx; |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
144 object **elarr; |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
145 t_BoxedSP_Array * arr = (t_BoxedSP_Array *)obj; |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
146 elarr = (object **)(arr+1); |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
147 for(idx = 0; idx < arr->payload.Length; ++idx) |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
148 { |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
149 release_ref(elarr[idx]); |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
150 } |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
151 } |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
152 |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
153 void internalarraynakedcleanup(object * obj) |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
154 { |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
155 int32_t tocopy,idx; |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
156 char *cur; |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
157 t_Array *arr = (t_Array *)obj; |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
158 t_Blueprint * bp = arr->payload.Eltype; |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
159 //Lower type IDs don't have any reference params so we can safely skip this for those |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
160 if(bp->bp->type_id >= TYPE_ARRAY) |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
161 { |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
162 //Ugly hack |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
163 cur = ((char *)(arr+1))-sizeof(object) ; |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
164 for(idx=0; idx < arr->payload.Length; ++idx) |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
165 { |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
166 bp->bp->cleanup((object *)cur); |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
167 cur += bp->bp->size; |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
168 } |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
169 } |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
170 release_ref((object *)bp); |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
171 } |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
172 |
104
2d2da148d844
Performance improvement for string comparisons
Mike Pavone <pavone@retrodev.com>
parents:
103
diff
changeset
|
173 int32_t _internal_memcmp_offset(void * left, int32_t loff, void * right, int32_t roff, int32_t len) |
2d2da148d844
Performance improvement for string comparisons
Mike Pavone <pavone@retrodev.com>
parents:
103
diff
changeset
|
174 { |
2d2da148d844
Performance improvement for string comparisons
Mike Pavone <pavone@retrodev.com>
parents:
103
diff
changeset
|
175 return memcmp(((char *)left)+loff, ((char *)right)+roff, len); |
2d2da148d844
Performance improvement for string comparisons
Mike Pavone <pavone@retrodev.com>
parents:
103
diff
changeset
|
176 } |
103
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
177 |