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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
fa437d23bb24 fix memory corruption bug
Mike Pavone <pavone@retrodev.com>
parents: 96
diff changeset
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
fa437d23bb24 fix memory corruption bug
Mike Pavone <pavone@retrodev.com>
parents: 96
diff changeset
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