@@ -15,6 +15,16 @@ struct _eaDSDynamicArray{
1515 void (* dataClear )(void * );
1616};
1717
18+ static void * copyAddress (const void * a )
19+ {
20+ return (void * ) a ;
21+ }
22+
23+ static int compareAddress (const void * a1 , const void * a2 )
24+ {
25+ return !(a1 == a2 );
26+ }
27+
1828eaDSDynamicArray eaDSDynamicArrayInit (void * (* dataCreateAndCopy )(const void * ), int (* dataCompare )(const void * , const void * ), void (* dataClear )(void * ))
1929{
2030 return eaDSDynamicArrayInitWithDetails (dataCreateAndCopy , dataCompare , dataClear , DEFAULT_EXP_FACTOR , DEFAULT_STARTING_CAPACITY );
@@ -24,34 +34,31 @@ eaDSDynamicArray eaDSDynamicArrayInitWithDetails(void * (*dataCreateAndCopy)(con
2434{
2535 eaDSDynamicArray dynamicArray = NULL ;
2636
27- if (dataCreateAndCopy && dataCompare && dataClear )
37+ dynamicArray = (eaDSDynamicArray ) malloc (sizeof (struct _eaDSDynamicArray ));
38+
39+ if (NULL == dynamicArray )
40+ {
41+ perror (NULL );
42+ }
43+ else
2844 {
29- dynamicArray = (eaDSDynamicArray ) malloc (sizeof (struct _eaDSDynamicArray ));
45+ dynamicArray -> StartingCapacity = startingCapacity ? startingCapacity : DEFAULT_STARTING_CAPACITY ;
46+ dynamicArray -> Data = (void * * ) malloc (dynamicArray -> StartingCapacity * sizeof (void * ));
3047
31- if (NULL == dynamicArray )
48+ if (NULL == dynamicArray -> Data )
3249 {
3350 perror (NULL );
51+ free (dynamicArray );
52+ dynamicArray = NULL ;
3453 }
3554 else
3655 {
37- dynamicArray -> StartingCapacity = startingCapacity ? startingCapacity : DEFAULT_STARTING_CAPACITY ;
38- dynamicArray -> Data = (void * * ) malloc (dynamicArray -> StartingCapacity * sizeof (void * ));
39-
40- if (NULL == dynamicArray -> Data )
41- {
42- perror (NULL );
43- free (dynamicArray );
44- dynamicArray = NULL ;
45- }
46- else
47- {
48- dynamicArray -> Count = 0 ;
49- dynamicArray -> Capacity = dynamicArray -> StartingCapacity ;
50- dynamicArray -> ExpFactor = (expFactor < 2 ) ? DEFAULT_EXP_FACTOR : expFactor ;
51- dynamicArray -> dataCreateAndCopy = dataCreateAndCopy ;
52- dynamicArray -> dataCompare = dataCompare ;
53- dynamicArray -> dataClear = dataClear ;
54- }
56+ dynamicArray -> Count = 0 ;
57+ dynamicArray -> Capacity = dynamicArray -> StartingCapacity ;
58+ dynamicArray -> ExpFactor = (expFactor < 2 ) ? DEFAULT_EXP_FACTOR : expFactor ;
59+ dynamicArray -> dataCreateAndCopy = (dataCreateAndCopy == NULL ) ? copyAddress : dataCreateAndCopy ;
60+ dynamicArray -> dataCompare = (dataCompare == NULL ) ? compareAddress : dataCompare ;
61+ dynamicArray -> dataClear = (dataClear == NULL ) ? free : dataClear ;
5562 }
5663 }
5764
0 commit comments