Changeset 808
- Timestamp:
- 12/19/10 07:28:15 (14 years ago)
- Files:
-
- branches/dmd-1.x/src/root/aav.c (modified) (1 diff)
- branches/dmd-1.x/src/root/array.c (modified) (1 diff)
- trunk/src/root/aav.c (modified) (1 diff)
- trunk/src/root/array.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
branches/dmd-1.x/src/root/aav.c
r606 r808 144 144 { 145 145 if (len <= prime_list[i]) 146 146 break; 147 147 } 148 148 len = prime_list[i]; 149 149 newb.b = new aaA*[len]; 150 150 memset(newb.b, 0, len * sizeof(aaA*)); 151 151 newb.b_length = len; 152 152 153 153 for (size_t k = 0; k < aa->b_length; k++) 154 154 { aaA *e = aa->b[k]; 155 155 while (e) 156 156 { aaA* enext = e->next; 157 157 size_t j = (size_t)e->key % len; 158 158 e->next = newb.b[j]; 159 159 newb.b[j] = e; 160 160 e = enext; 161 161 } 162 162 } 163 163 if (aa->b != aa->binit) 164 delete aa->b;164 delete[] aa->b; 165 165 166 166 newb.nodes = aa->nodes; 167 167 } 168 168 169 169 **paa = newb; 170 170 } 171 171 } 172 172 173 173 174 174 #if UNITTEST 175 175 176 176 void unittest_aa() 177 177 { 178 178 AA* aa = NULL; 179 179 Value v = _aaGetRvalue(aa, NULL); 180 180 assert(!v); 181 181 Value *pv = _aaGet(&aa, NULL); 182 182 assert(pv); 183 183 *pv = (void *)3; 184 184 v = _aaGetRvalue(aa, NULL); branches/dmd-1.x/src/root/array.c
r518 r808 160 160 reserve(d); 161 161 if (dim != index) 162 162 memmove(data + index + d, data + index, (dim - index) * sizeof(*data)); 163 163 memcpy(data + index, a->data, d * sizeof(*data)); 164 164 dim += d; 165 165 } 166 166 } 167 167 168 168 169 169 /*********************************** 170 170 * Append array a to this array. 171 171 */ 172 172 173 173 void Array::append(Array *a) 174 174 { 175 175 insert(dim, a); 176 176 } 177 177 178 178 void Array::remove(unsigned i) 179 179 { 180 memmove(data + i, data + i + 1, (dim - i) * sizeof(data[0])); 180 if (dim - i - 1) 181 memmove(data + i, data + i + 1, (dim - i - 1) * sizeof(data[0])); 181 182 dim--; 182 183 } 183 184 184 185 char *Array::toChars() 185 186 { 186 187 unsigned len; 187 188 unsigned u; 188 189 char **buf; 189 190 char *str; 190 191 char *p; 191 192 192 193 buf = (char **)alloca(dim * sizeof(char *)); 193 194 len = 2; 194 195 for (u = 0; u < dim; u++) 195 196 { 196 197 buf[u] = ((Object *)data[u])->toChars(); 197 198 len += strlen(buf[u]) + 1; 198 199 } 199 200 str = (char *)mem.malloc(len); 200 201 trunk/src/root/aav.c
r484 r808 144 144 { 145 145 if (len <= prime_list[i]) 146 146 break; 147 147 } 148 148 len = prime_list[i]; 149 149 newb.b = new aaA*[len]; 150 150 memset(newb.b, 0, len * sizeof(aaA*)); 151 151 newb.b_length = len; 152 152 153 153 for (size_t k = 0; k < aa->b_length; k++) 154 154 { aaA *e = aa->b[k]; 155 155 while (e) 156 156 { aaA* enext = e->next; 157 157 size_t j = (size_t)e->key % len; 158 158 e->next = newb.b[j]; 159 159 newb.b[j] = e; 160 160 e = enext; 161 161 } 162 162 } 163 163 if (aa->b != aa->binit) 164 delete aa->b;164 delete[] aa->b; 165 165 166 166 newb.nodes = aa->nodes; 167 167 } 168 168 169 169 **paa = newb; 170 170 } 171 171 } 172 172 173 173 174 174 #if UNITTEST 175 175 176 176 void unittest_aa() 177 177 { 178 178 AA* aa = NULL; 179 179 Value v = _aaGetRvalue(aa, NULL); 180 180 assert(!v); 181 181 Value *pv = _aaGet(&aa, NULL); 182 182 assert(pv); 183 183 *pv = (void *)3; 184 184 v = _aaGetRvalue(aa, NULL); trunk/src/root/array.c
r518 r808 160 160 reserve(d); 161 161 if (dim != index) 162 162 memmove(data + index + d, data + index, (dim - index) * sizeof(*data)); 163 163 memcpy(data + index, a->data, d * sizeof(*data)); 164 164 dim += d; 165 165 } 166 166 } 167 167 168 168 169 169 /*********************************** 170 170 * Append array a to this array. 171 171 */ 172 172 173 173 void Array::append(Array *a) 174 174 { 175 175 insert(dim, a); 176 176 } 177 177 178 178 void Array::remove(unsigned i) 179 179 { 180 memmove(data + i, data + i + 1, (dim - i) * sizeof(data[0])); 180 if (dim - i - 1) 181 memmove(data + i, data + i + 1, (dim - i - 1) * sizeof(data[0])); 181 182 dim--; 182 183 } 183 184 184 185 char *Array::toChars() 185 186 { 186 187 unsigned len; 187 188 unsigned u; 188 189 char **buf; 189 190 char *str; 190 191 char *p; 191 192 192 193 buf = (char **)alloca(dim * sizeof(char *)); 193 194 len = 2; 194 195 for (u = 0; u < dim; u++) 195 196 { 196 197 buf[u] = ((Object *)data[u])->toChars(); 197 198 len += strlen(buf[u]) + 1; 198 199 } 199 200 str = (char *)mem.malloc(len); 200 201
