Skip to content

Commit 6718959

Browse files
committed
code refactor
1 parent 738e15f commit 6718959

File tree

7 files changed

+133
-59
lines changed

7 files changed

+133
-59
lines changed

Source/Library/Array.c

+31-1
Original file line numberDiff line numberDiff line change
@@ -39,14 +39,44 @@ void *array_at(array *array, size_t index)
3939
return NULL;
4040
}
4141
uint8_t *casted = (uint8_t *)array->data;
42-
uint8_t *ptr = casted + index * array->sizeOfType;
42+
uint8_t *ptr = casted + index * array_size_of_type(array);
4343
return (void *)ptr;
4444
}
4545

46+
bool array_get_at(array *array, size_t index, void *value)
47+
{
48+
void *ptr = array_at(array, index);
49+
if (ptr == NULL || value == NULL)
50+
{
51+
return false;
52+
}
53+
memcpy(value, ptr, array_size_of_type(array));
54+
return true;
55+
}
56+
57+
bool array_set_at(array *array, size_t index, void *value)
58+
{
59+
void *ptr = array_at(array, index);
60+
if (ptr == NULL || value == NULL)
61+
{
62+
return false;
63+
}
64+
memcpy(ptr, value, array_size_of_type(array));
65+
return true;
66+
}
67+
4668
void *array_front(array *array) { return array_at(array, 0); }
4769

70+
bool array_set_front(array *array, void *value) { return array_set_at(array, 0, value); }
71+
72+
bool array_get_front(array *array, void *value) { return array_get_at(array, 0, value); }
73+
4874
void *array_back(array *array) { return array_at(array, array_size(array) - 1); }
4975

76+
bool array_set_back(array *array, void *value) { return array_set_at(array, array_size(array) - 1, value); }
77+
78+
bool array_get_back(array *array, void *value) { return array_get_at(array, array_size(array) - 1, value); }
79+
5080
size_t array_size(array *array) { return array->size; }
5181

5282
size_t array_size_of_type(array *array) { return array->sizeOfType; }

Source/Library/Vector.c

+28-14
Original file line numberDiff line numberDiff line change
@@ -47,58 +47,72 @@ void *vector_at(vector *vector, size_t index)
4747
return array_at(vector->array, index);
4848
}
4949

50-
void *vector_front(vector *vector)
50+
bool vector_set_at(vector *vector, size_t index, void *value)
5151
{
52-
if (vector_empty(vector))
52+
if (index >= vector_size(vector))
5353
{
54-
return NULL;
54+
return false;
5555
}
56-
return array_front(vector->array);
56+
return array_set_at(vector->array, index, value);
5757
}
5858

59-
void *vector_back(vector *vector)
59+
bool vector_get_at(vector *vector, size_t index, void *value)
6060
{
61-
if (vector_empty(vector))
61+
if (index >= vector_size(vector))
6262
{
63-
return NULL;
63+
return false;
6464
}
65-
return array_at(vector->array, vector_size(vector) - 1);
65+
return array_get_at(vector->array, index, value);
6666
}
6767

68+
void *vector_front(vector *vector) { return vector_at(vector, 0); }
69+
70+
bool vector_set_front(vector *vector, void *value) { return vector_set_at(vector, 0, value); }
71+
72+
bool vector_get_front(vector *vector, void *value) { return vector_get_at(vector, 0, value); }
73+
74+
void *vector_back(vector *vector) { return vector_at(vector, vector_size(vector) - 1); }
75+
76+
bool vector_set_back(vector *vector, void *value) { return vector_set_at(vector, vector_size(vector) - 1, value); }
77+
78+
bool vector_get_back(vector *vector, void *value) { return vector_get_at(vector, vector_size(vector) - 1, value); }
79+
6880
void *vector_data(vector *vector) { return array_data(vector->array); }
6981

7082
size_t vector_size(vector *vector) { return vector->size; }
7183

7284
bool vector_empty(vector *vector) { return vector_size(vector) == 0; }
7385

74-
void *vector_expand(vector *vector)
86+
bool vector_append(vector *vector, void *value)
7587
{
7688
if (vector_size(vector) < array_size(vector->array))
7789
{
7890
vector->size++;
79-
return vector_back(vector);
91+
return vector_set_back(vector, value);
8092
}
8193
size_t newArraySize = get_array_size(vector->size + 1);
8294

8395
array *newArray = array_create(newArraySize, array_size_of_type(vector->array));
8496
if (newArray == NULL)
8597
{
86-
return NULL;
98+
return false;
8799
}
88100

89101
array_copy(vector->array, newArray);
90102
array_destroy(vector->array);
91103
vector->array = newArray;
92104
vector->size++;
93-
return vector_back(vector);
105+
return vector_set_back(vector, value);
94106
}
95107

96-
void vector_shrink(vector *vector)
108+
bool vector_pop(vector *vector, void *value)
97109
{
98-
if (vector->size > 0)
110+
bool result = vector_get_back(vector, value);
111+
if (result && vector->size > 0)
99112
{
100113
vector->size--;
101114
}
115+
return result;
102116
}
103117

104118
void vector_erase(vector *vector, size_t index) {}

Source/Library/h/Array.h

+12
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,22 @@ extern "C"
1414

1515
void *array_at(array *array, size_t index);
1616

17+
bool array_set_at(array *array, size_t index, void *value);
18+
19+
bool array_get_at(array *array, size_t index, void *value);
20+
1721
void *array_front(array *array);
1822

23+
bool array_set_front(array *array, void *value);
24+
25+
bool array_get_front(array *array, void *value);
26+
1927
void *array_back(array *array);
2028

29+
bool array_set_back(array *array, void *value);
30+
31+
bool array_get_back(array *array, void *value);
32+
2133
void *array_data(array *array);
2234

2335
void array_copy(array *source, array *destination);

Source/Library/h/Vector.h

+14-2
Original file line numberDiff line numberDiff line change
@@ -14,19 +14,31 @@ extern "C"
1414

1515
void *vector_at(vector *vector, size_t index);
1616

17+
bool vector_set_at(vector *vector, size_t index, void *value);
18+
19+
bool vector_get_at(vector *vector, size_t index, void *value);
20+
1721
void *vector_front(vector *vector);
1822

23+
bool vector_set_front(vector *vector, void *value);
24+
25+
bool vector_get_front(vector *vector, void *value);
26+
1927
void *vector_back(vector *vector);
2028

29+
bool vector_set_back(vector *vector, void *value);
30+
31+
bool vector_get_back(vector *vector, void *value);
32+
2133
void *vector_data(vector *vector);
2234

2335
size_t vector_size(vector *vector);
2436

2537
bool vector_empty(vector *vector);
2638

27-
void *vector_expand(vector *vector);
39+
bool vector_append(vector *vector, void *value);
2840

29-
void vector_shrink(vector *vector);
41+
bool vector_pop(vector *vector, void *value);
3042

3143
void vector_erase(vector *vector, size_t index);
3244

Tests/ArrayTest.cpp

+14-11
Original file line numberDiff line numberDiff line change
@@ -51,13 +51,16 @@ TEST_F(ArrayTest, ElementAtTest)
5151
{
5252
array *array = array_create(3, sizeof(int));
5353

54-
int *first = (int *)array_at(array, 0);
55-
*first = 123;
54+
int value = 123;
55+
array_set_at(array, 0, &value);
5656
*(int *)array_at(array, 1) = 12;
5757
*(int *)array_at(array, 2) = -12;
5858

5959
EXPECT_EQ(*(int *)array_at(array, 0), 123);
60-
EXPECT_EQ(*(int *)array_at(array, 1), 12);
60+
61+
array_get_at(array, 1, &value);
62+
EXPECT_EQ(value, 12);
63+
6164
EXPECT_EQ(*(int *)array_at(array, 2), -12);
6265
EXPECT_FALSE(array_at(array, 5));
6366

@@ -68,8 +71,8 @@ TEST_F(ArrayTest, FirstElementTest)
6871
{
6972
array *array = array_create(3, sizeof(int));
7073

71-
int *first = (int *)array_at(array, 0);
72-
*first = 123;
74+
int value = 123;
75+
array_set_at(array, 0, &value);
7376
*(int *)array_at(array, 1) = 12;
7477
*(int *)array_at(array, 2) = -12;
7578

@@ -82,8 +85,8 @@ TEST_F(ArrayTest, LastElementTest)
8285
{
8386
array *array = array_create(3, sizeof(int));
8487

85-
int *first = (int *)array_at(array, 0);
86-
*first = 123;
88+
int value = 123;
89+
array_set_at(array, 0, &value);
8790
*(int *)array_at(array, 1) = 12;
8891
*(int *)array_at(array, 2) = -12;
8992

@@ -96,8 +99,8 @@ TEST_F(ArrayTest, SizeTest)
9699
{
97100
array *array = array_create(3, sizeof(int));
98101

99-
int *first = (int *)array_at(array, 0);
100-
*first = 123;
102+
int value = 123;
103+
array_set_at(array, 0, &value);
101104
*(int *)array_at(array, 1) = 12;
102105
*(int *)array_at(array, 2) = -12;
103106

@@ -111,8 +114,8 @@ TEST_F(ArrayTest, CopyTest)
111114
array *arr = array_create(3, sizeof(int));
112115
array *dest = array_create(4, sizeof(int));
113116

114-
int *first = (int *)array_at(arr, 0);
115-
*first = 123;
117+
int value = 123;
118+
array_set_at(arr, 0, &value);
116119
*(int *)array_at(arr, 1) = 12;
117120
*(int *)array_at(arr, 2) = -12;
118121

Tests/RunTests.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
int main(int argc, char *argv[])
44
{
55
// Run a specific test only
6-
testing::GTEST_FLAG(filter) = "VectorTest.*";
6+
// testing::GTEST_FLAG(filter) = "VectorTest.*";
77

88
::testing::InitGoogleTest(&argc, argv);
99
return RUN_ALL_TESTS();

Tests/VectorTest.cpp

+33-30
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,9 @@ TEST_F(VectorTest, ElementAtTest)
5151
{
5252
vector *vector = vector_create(3, sizeof(int));
5353

54-
int *first = (int *)vector_at(vector, 0);
55-
*first = 123;
56-
*(int *)vector_at(vector, 1) = 12;
54+
int value = 123;
55+
vector_set_at(vector, 0, &value);
56+
vector_set_at(vector, 1, &(value = 12));
5757
*(int *)vector_at(vector, 2) = -12;
5858

5959
EXPECT_EQ(*(int *)vector_at(vector, 0), 123);
@@ -68,9 +68,9 @@ TEST_F(VectorTest, FirstElementTest)
6868
{
6969
vector *vector = vector_create(3, sizeof(int));
7070

71-
int *first = (int *)vector_at(vector, 0);
72-
*first = 123;
73-
*(int *)vector_at(vector, 1) = 12;
71+
int value = 123;
72+
vector_set_at(vector, 0, &value);
73+
vector_set_at(vector, 1, &(value = 123));
7474
*(int *)vector_at(vector, 2) = -12;
7575

7676
EXPECT_EQ(*(int *)vector_front(vector), 123);
@@ -82,9 +82,9 @@ TEST_F(VectorTest, LastElementTest)
8282
{
8383
vector *vector = vector_create(3, sizeof(int));
8484

85-
int *first = (int *)vector_at(vector, 0);
86-
*first = 123;
87-
*(int *)vector_at(vector, 1) = 12;
85+
int value = 123;
86+
vector_set_at(vector, 0, &value);
87+
vector_set_at(vector, 1, &(value = 12));
8888
*(int *)vector_at(vector, 2) = -12;
8989

9090
EXPECT_EQ(*(int *)vector_back(vector), -12);
@@ -96,9 +96,9 @@ TEST_F(VectorTest, SizeTest)
9696
{
9797
vector *vector = vector_create(3, sizeof(int));
9898

99-
int *first = (int *)vector_at(vector, 0);
100-
*first = 123;
101-
*(int *)vector_at(vector, 1) = 12;
99+
int value = 123;
100+
vector_set_at(vector, 0, &value);
101+
vector_set_at(vector, 1, &(value = 12));
102102
*(int *)vector_at(vector, 2) = -12;
103103

104104
EXPECT_EQ(vector_size(vector), 3);
@@ -119,9 +119,9 @@ TEST_F(VectorTest, ClearTest)
119119
{
120120
vector *vector = vector_create(3, sizeof(int));
121121

122-
int *first = (int *)vector_at(vector, 0);
123-
*first = 123;
124-
*(int *)vector_at(vector, 1) = 12;
122+
int value = 123;
123+
vector_set_at(vector, 0, &value);
124+
vector_set_at(vector, 1, &(value = 12));
125125
*(int *)vector_at(vector, 2) = -12;
126126

127127
vector_clear(vector);
@@ -131,40 +131,43 @@ TEST_F(VectorTest, ClearTest)
131131
vector_destroy(vector);
132132
}
133133

134-
TEST_F(VectorTest, ExpandTest)
134+
TEST_F(VectorTest, AppendTest)
135135
{
136136
vector *vector = vector_create(4, sizeof(int));
137137

138-
int *first = (int *)vector_at(vector, 0);
139-
*first = 123;
140-
*(int *)vector_at(vector, 1) = 12;
138+
int value = 123;
139+
vector_set_at(vector, 0, &value);
140+
vector_set_at(vector, 1, &(value = 12));
141141
*(int *)vector_at(vector, 2) = -12;
142142

143-
int *newPos = (int *)vector_expand(vector);
144-
*newPos = 9;
145-
newPos = (int *)vector_expand(vector);
146-
*newPos = 1;
143+
int element = 9;
144+
vector_append(vector, &element);
145+
element = 1;
146+
vector_append(vector, &element);
147147

148148
EXPECT_EQ(*(int *)vector_at(vector, 0), 123);
149149
EXPECT_EQ(*(int *)vector_at(vector, 1), 12);
150150
EXPECT_EQ(*(int *)vector_at(vector, 2), -12);
151+
EXPECT_EQ(*(int *)vector_at(vector, 4), 9);
151152
EXPECT_EQ(*(int *)vector_back(vector), 1);
152153
EXPECT_EQ(vector_size(vector), 6);
153154

154155
vector_destroy(vector);
155156
}
156157

157-
TEST_F(VectorTest, ShrinkTest)
158+
TEST_F(VectorTest, PopTest)
158159
{
159160
vector *vector = vector_create(2, sizeof(int));
160161

161-
int *first = (int *)vector_at(vector, 0);
162-
*first = 123;
163-
*(int *)vector_at(vector, 1) = 12;
162+
int value = 123;
163+
vector_set_at(vector, 0, &value);
164+
vector_set_at(vector, 1, &(value = 1));
164165

165-
vector_shrink(vector);
166-
vector_shrink(vector);
167-
vector_shrink(vector);
166+
vector_pop(vector, &value);
167+
EXPECT_EQ(value, 1);
168+
vector_pop(vector, &value);
169+
EXPECT_EQ(value, 123);
170+
vector_pop(vector, &value);
168171

169172
EXPECT_TRUE(vector_empty(vector));
170173

0 commit comments

Comments
 (0)