@@ -163,7 +163,10 @@ static int homing_search_cmp(const void *key, const void *array_member)
163
163
* around the area for our target file.
164
164
*/
165
165
static int tree_key_search (
166
- size_t * at_pos , git_vector * entries , const char * filename , size_t filename_len )
166
+ size_t * at_pos ,
167
+ const git_tree * tree ,
168
+ const char * filename ,
169
+ size_t filename_len )
167
170
{
168
171
struct tree_key_search ksearch ;
169
172
const git_tree_entry * entry ;
@@ -176,13 +179,15 @@ static int tree_key_search(
176
179
177
180
/* Initial homing search; find an entry on the tree with
178
181
* the same prefix as the filename we're looking for */
179
- if (git_vector_bsearch2 (& homing , entries , & homing_search_cmp , & ksearch ) < 0 )
182
+
183
+ if (git_array_search (& homing ,
184
+ tree -> entries , & homing_search_cmp , & ksearch ) < 0 )
180
185
return GIT_ENOTFOUND ; /* just a signal error; not passed back to user */
181
186
182
187
/* We found a common prefix. Look forward as long as
183
188
* there are entries that share the common prefix */
184
- for (i = homing ; i < entries -> length ; ++ i ) {
185
- entry = entries -> contents [ i ] ;
189
+ for (i = homing ; i < tree -> entries . size ; ++ i ) {
190
+ entry = git_array_get ( tree -> entries , i ) ;
186
191
187
192
if (homing_search_cmp (& ksearch , entry ) < 0 )
188
193
break ;
@@ -202,7 +207,7 @@ static int tree_key_search(
202
207
i = homing - 1 ;
203
208
204
209
do {
205
- entry = entries -> contents [ i ] ;
210
+ entry = git_array_get ( tree -> entries , i ) ;
206
211
207
212
if (homing_search_cmp (& ksearch , entry ) > 0 )
208
213
break ;
@@ -250,8 +255,7 @@ void git_tree__free(void *_tree)
250
255
git_tree * tree = _tree ;
251
256
252
257
git_odb_object_free (tree -> odb_obj );
253
- git_vector_free (& tree -> entries );
254
- git_array_clear (tree -> entries_arr );
258
+ git_array_clear (tree -> entries );
255
259
git__free (tree );
256
260
}
257
261
@@ -303,13 +307,10 @@ static const git_tree_entry *entry_fromname(
303
307
{
304
308
size_t idx ;
305
309
306
- /* be safe when we cast away constness - i.e. don't trigger a sort */
307
- assert (git_vector_is_sorted (& tree -> entries ));
308
-
309
- if (tree_key_search (& idx , (git_vector * )& tree -> entries , name , name_len ) < 0 )
310
+ if (tree_key_search (& idx , tree , name , name_len ) < 0 )
310
311
return NULL ;
311
312
312
- return git_vector_get ( & tree -> entries , idx );
313
+ return git_array_get ( tree -> entries , idx );
313
314
}
314
315
315
316
const git_tree_entry * git_tree_entry_byname (
@@ -324,7 +325,7 @@ const git_tree_entry *git_tree_entry_byindex(
324
325
const git_tree * tree , size_t idx )
325
326
{
326
327
assert (tree );
327
- return git_vector_get ( & tree -> entries , idx );
328
+ return git_array_get ( tree -> entries , idx );
328
329
}
329
330
330
331
const git_tree_entry * git_tree_entry_byid (
@@ -335,7 +336,7 @@ const git_tree_entry *git_tree_entry_byid(
335
336
336
337
assert (tree );
337
338
338
- git_vector_foreach ( & tree -> entries , i , e ) {
339
+ git_array_foreach ( tree -> entries , i , e ) {
339
340
if (memcmp (& e -> oid -> id , & id -> id , sizeof (id -> id )) == 0 )
340
341
return e ;
341
342
}
@@ -345,7 +346,6 @@ const git_tree_entry *git_tree_entry_byid(
345
346
346
347
int git_tree__prefix_position (const git_tree * tree , const char * path )
347
348
{
348
- const git_vector * entries = & tree -> entries ;
349
349
struct tree_key_search ksearch ;
350
350
size_t at_pos , path_len ;
351
351
@@ -358,21 +358,20 @@ int git_tree__prefix_position(const git_tree *tree, const char *path)
358
358
ksearch .filename = path ;
359
359
ksearch .filename_len = (uint16_t )path_len ;
360
360
361
- /* be safe when we cast away constness - i.e. don't trigger a sort */
362
- assert (git_vector_is_sorted (& tree -> entries ));
363
-
364
361
/* Find tree entry with appropriate prefix */
365
- git_vector_bsearch2 (
366
- & at_pos , ( git_vector * ) entries , & homing_search_cmp , & ksearch );
362
+ git_array_search (
363
+ & at_pos , tree -> entries , & homing_search_cmp , & ksearch );
367
364
368
- for (; at_pos < entries -> length ; ++ at_pos ) {
369
- const git_tree_entry * entry = entries -> contents [ at_pos ] ;
365
+ for (; at_pos < tree -> entries . size ; ++ at_pos ) {
366
+ const git_tree_entry * entry = git_array_get ( tree -> entries , at_pos ) ;
370
367
if (homing_search_cmp (& ksearch , entry ) < 0 )
371
368
break ;
372
369
}
373
370
374
371
for (; at_pos > 0 ; -- at_pos ) {
375
- const git_tree_entry * entry = entries -> contents [at_pos - 1 ];
372
+ const git_tree_entry * entry =
373
+ git_array_get (tree -> entries , at_pos - 1 );
374
+
376
375
if (homing_search_cmp (& ksearch , entry ) > 0 )
377
376
break ;
378
377
}
@@ -383,7 +382,7 @@ int git_tree__prefix_position(const git_tree *tree, const char *path)
383
382
size_t git_tree_entrycount (const git_tree * tree )
384
383
{
385
384
assert (tree );
386
- return tree -> entries .length ;
385
+ return tree -> entries .size ;
387
386
}
388
387
389
388
unsigned int git_treebuilder_entrycount (git_treebuilder * bld )
@@ -423,7 +422,6 @@ static int parse_mode(unsigned int *modep, const char *buffer, const char **buff
423
422
424
423
int git_tree__parse (void * _tree , git_odb_object * odb_obj )
425
424
{
426
- size_t i ;
427
425
git_tree * tree = _tree ;
428
426
const char * buffer ;
429
427
const char * buffer_end ;
@@ -434,8 +432,8 @@ int git_tree__parse(void *_tree, git_odb_object *odb_obj)
434
432
buffer = git_odb_object_data (tree -> odb_obj );
435
433
buffer_end = buffer + git_odb_object_size (tree -> odb_obj );
436
434
437
- git_array_init_to_size (tree -> entries_arr , DEFAULT_TREE_SIZE );
438
- GITERR_CHECK_ARRAY (tree -> entries_arr );
435
+ git_array_init_to_size (tree -> entries , DEFAULT_TREE_SIZE );
436
+ GITERR_CHECK_ARRAY (tree -> entries );
439
437
440
438
while (buffer < buffer_end ) {
441
439
git_tree_entry * entry ;
@@ -450,9 +448,9 @@ int git_tree__parse(void *_tree, git_odb_object *odb_obj)
450
448
return tree_error ("Failed to parse tree. Object is corrupted" , NULL );
451
449
452
450
filename_len = nul - buffer ;
453
- /** Allocate the entry and store it in the entries vector */
451
+ /* Allocate the entry */
454
452
{
455
- entry = git_array_alloc (tree -> entries_arr );
453
+ entry = git_array_alloc (tree -> entries );
456
454
GITERR_CHECK_ALLOC (entry );
457
455
458
456
entry -> attr = attr ;
@@ -465,18 +463,6 @@ int git_tree__parse(void *_tree, git_odb_object *odb_obj)
465
463
buffer += GIT_OID_RAWSZ ;
466
464
}
467
465
468
- /* Add the entries to the vector here, as we may reallocate during the loop */
469
- if (git_vector_init (& tree -> entries , tree -> entries_arr .size , entry_sort_cmp ) < 0 )
470
- return -1 ;
471
-
472
- for (i = 0 ; i < tree -> entries_arr .size ; i ++ ) {
473
- if (git_vector_insert (& tree -> entries , git_array_get (tree -> entries_arr , i )) < 0 )
474
- return -1 ;
475
- }
476
-
477
- /* The tree is sorted by definition. Bad inputs give bad outputs */
478
- tree -> entries .flags |= GIT_VECTOR_SORTED ;
479
-
480
466
return 0 ;
481
467
}
482
468
@@ -700,7 +686,7 @@ int git_treebuilder_new(
700
686
if (source != NULL ) {
701
687
git_tree_entry * entry_src ;
702
688
703
- git_vector_foreach ( & source -> entries , i , entry_src ) {
689
+ git_array_foreach ( source -> entries , i , entry_src ) {
704
690
if (append_entry (
705
691
bld , entry_src -> filename ,
706
692
entry_src -> oid ,
@@ -845,7 +831,6 @@ int git_treebuilder_write(git_oid *oid, git_treebuilder *bld)
845
831
error = -1 ;
846
832
}
847
833
848
- git_vector_free (& entries );
849
834
850
835
if (!error &&
851
836
!(error = git_repository_odb__weakptr (& odb , bld -> repo )))
@@ -975,7 +960,7 @@ static int tree_walk(
975
960
size_t i ;
976
961
const git_tree_entry * entry ;
977
962
978
- git_vector_foreach ( & tree -> entries , i , entry ) {
963
+ git_array_foreach ( tree -> entries , i , entry ) {
979
964
if (preorder ) {
980
965
error = callback (path -> ptr , entry , payload );
981
966
if (error < 0 ) { /* negative value stops iteration */
0 commit comments