Skip to content

Commit d2435d7

Browse files
committed
NULL değer ile çağrılırsa kurulum fonksiyonları, ilgili statik fonksiyonlar kullanılacak.
1 parent 2d6a85a commit d2435d7

4 files changed

Lines changed: 55 additions & 28 deletions

File tree

DS/eaDSDynamicArray.c

Lines changed: 28 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
1828
eaDSDynamicArray 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

DS/eaDSLinkedList.c

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,16 @@ struct _eaDSLinkedList{
1616
void (*dataClear)(void *);
1717
};
1818

19+
static void * copyAddress(const void * a)
20+
{
21+
return (void *) a;
22+
}
23+
24+
static int compareAddress(const void * a1, const void * a2)
25+
{
26+
return !(a1 == a2);
27+
}
28+
1929
eaDSLinkedList eaDSLinkedListInit(void * (*dataCreateAndCopy)(const void *), int (*dataCompare)(const void *, const void *), void (*dataClear)(void *))
2030
{
2131
eaDSLinkedList linkedList;
@@ -30,9 +40,9 @@ eaDSLinkedList eaDSLinkedListInit(void * (*dataCreateAndCopy)(const void *), int
3040
{
3141
linkedList->Head = NULL;
3242
linkedList->Tail = NULL;
33-
linkedList->dataCreateAndCopy = dataCreateAndCopy;
34-
linkedList->dataCompare = dataCompare;
35-
linkedList->dataClear = dataClear;
43+
linkedList->dataCreateAndCopy = (dataCreateAndCopy == NULL) ? copyAddress : dataCreateAndCopy;
44+
linkedList->dataCompare = (dataCompare == NULL) ? compareAddress : dataCompare;
45+
linkedList->dataClear = (dataClear == NULL) ? free : dataClear;
3646
}
3747

3848
return linkedList;

DS/eaDSQueue.c

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,11 @@ struct _eaDSQueue {
1515
void (*dataClear)(void *);
1616
};
1717

18+
static void * copyAddress(const void * a)
19+
{
20+
return (void *) a;
21+
}
22+
1823
eaDSQueue eaDSQueueInit(void * (*dataCreateAndCopy)(const void *), void (*dataClear)(void *))
1924
{
2025
eaDSQueue queue;
@@ -29,8 +34,8 @@ eaDSQueue eaDSQueueInit(void * (*dataCreateAndCopy)(const void *), void (*dataCl
2934
{
3035
queue->Front = NULL;
3136
queue->Rear = NULL;
32-
queue->dataCreateAndCopy = dataCreateAndCopy;
33-
queue->dataClear = dataClear;
37+
queue->dataCreateAndCopy = (dataCreateAndCopy == NULL) ? copyAddress : dataCreateAndCopy;
38+
queue->dataClear = (dataClear == NULL) ? free : dataClear;
3439
}
3540

3641
return queue;

DS/eaDSStack.c

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,11 @@ struct _eaDSStack {
1515
void (*dataClear)(void *);
1616
};
1717

18+
static void * copyAddress(const void * a)
19+
{
20+
return (void *) a;
21+
}
22+
1823
eaDSStack eaDSStackInit(void * (*dataCreateAndCopy)(const void *), void (*dataClear)(void *))
1924
{
2025
return eaDSStackInitWithDetails(dataCreateAndCopy, dataClear, DEFAULT_EXP_FACTOR, DEFAULT_STARTING_CAPACITY);
@@ -46,8 +51,8 @@ eaDSStack eaDSStackInitWithDetails(void * (*dataCreateAndCopy)(const void *), vo
4651
stack->Count = 0;
4752
stack->Capacity = stack->StartingCapacity;
4853
stack->ExpFactor = (expFactor < 2) ? DEFAULT_EXP_FACTOR : expFactor;
49-
stack->dataCreateAndCopy = dataCreateAndCopy;
50-
stack->dataClear = dataClear;
54+
stack->dataCreateAndCopy = (dataCreateAndCopy == NULL) ? copyAddress : dataCreateAndCopy;
55+
stack->dataClear = (dataClear == NULL) ? free : dataClear;
5156
}
5257
}
5358

0 commit comments

Comments
 (0)