Skip to content

Commit c50d2b6

Browse files
committed
Handle null vector as input and remove vector_is_released function
1 parent 394c678 commit c50d2b6

10 files changed

+101
-28
lines changed

CHANGELOG.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
## CHANGELOG
22

3-
### v0.1.2
3+
### v0.1.2 (2022-10-25)
44

5+
* Handle null vector as input
6+
* Removed vector_is_released function
57
* Free all memory in tests
68
* Test memory leaks in CI
79
* Added void to no arg functions

include/vector.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ struct Vector;
99
struct Vector *vector_new(void);
1010
struct Vector *vector_new_with_options(const size_t /* initial_size */, const bool /* allow_resize */);
1111

12-
bool vector_is_released(struct Vector *);
1312
bool vector_is_empty(struct Vector *);
1413
size_t vector_size(struct Vector *);
1514
size_t vector_capacity(struct Vector *);

src/vector.c

Lines changed: 38 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ static bool _vector_set_capacity(struct Vector *, size_t);
99

1010
struct Vector
1111
{
12-
bool released;
1312
size_t size;
1413
size_t capacity;
1514
void **buffer;
@@ -38,7 +37,6 @@ struct Vector *vector_new_with_options(const size_t initial_size, const bool all
3837
return(NULL);
3938
}
4039

41-
vector->released = false;
4240
vector->size = 0;
4341
vector->capacity = size;
4442

@@ -56,39 +54,53 @@ struct Vector *vector_new_with_options(const size_t initial_size, const bool all
5654
}
5755

5856

59-
bool vector_is_released(struct Vector *vector)
60-
{
61-
return(vector == NULL || vector->released);
62-
}
63-
64-
6557
bool vector_is_empty(struct Vector *vector)
6658
{
59+
if (vector == NULL)
60+
{
61+
return(true);
62+
}
63+
6764
return(vector->size == 0);
6865
}
6966

7067

7168
size_t vector_size(struct Vector *vector)
7269
{
70+
if (vector == NULL)
71+
{
72+
return(0);
73+
}
74+
7375
return(vector->size);
7476
}
7577

7678

7779
size_t vector_capacity(struct Vector *vector)
7880
{
81+
if (vector == NULL)
82+
{
83+
return(0);
84+
}
85+
7986
return(vector->capacity);
8087
}
8188

8289

8390
bool vector_is_allow_resize(struct Vector *vector)
8491
{
92+
if (vector == NULL)
93+
{
94+
return(false);
95+
}
96+
8597
return(vector->allow_resize);
8698
}
8799

88100

89101
bool vector_clear(struct Vector *vector)
90102
{
91-
if (vector_is_released(vector))
103+
if (vector == NULL)
92104
{
93105
return(false);
94106
}
@@ -105,7 +117,7 @@ bool vector_clear(struct Vector *vector)
105117

106118
void vector_release(struct Vector *vector)
107119
{
108-
if (vector_is_released(vector))
120+
if (vector == NULL)
109121
{
110122
return;
111123
}
@@ -116,15 +128,13 @@ void vector_release(struct Vector *vector)
116128
vector->buffer = NULL;
117129
}
118130

119-
vector->released = true;
120-
121131
free(vector);
122132
}
123133

124134

125135
bool vector_ensure_capacity(struct Vector *vector, const size_t size)
126136
{
127-
if (vector_is_released(vector))
137+
if (vector == NULL)
128138
{
129139
return(false);
130140
}
@@ -140,7 +150,7 @@ bool vector_ensure_capacity(struct Vector *vector, const size_t size)
140150

141151
bool vector_shrink(struct Vector *vector)
142152
{
143-
if (vector_is_released(vector))
153+
if (vector == NULL)
144154
{
145155
return(false);
146156
}
@@ -156,7 +166,7 @@ bool vector_shrink(struct Vector *vector)
156166

157167
void **vector_to_array(struct Vector *vector)
158168
{
159-
if (vector_is_released(vector))
169+
if (vector == NULL)
160170
{
161171
return(NULL);
162172
}
@@ -175,7 +185,7 @@ void **vector_to_array(struct Vector *vector)
175185

176186
bool vector_push(struct Vector *vector, void *item)
177187
{
178-
if (vector_is_released(vector))
188+
if (vector == NULL)
179189
{
180190
return(false);
181191
}
@@ -186,7 +196,7 @@ bool vector_push(struct Vector *vector, void *item)
186196

187197
void *vector_pop(struct Vector *vector)
188198
{
189-
if (vector_is_released(vector))
199+
if (vector == NULL)
190200
{
191201
return(NULL);
192202
}
@@ -202,7 +212,7 @@ void *vector_pop(struct Vector *vector)
202212

203213
void *vector_set(struct Vector *vector, size_t index, void *item)
204214
{
205-
if (vector_is_released(vector))
215+
if (vector == NULL)
206216
{
207217
return(NULL);
208218
}
@@ -226,7 +236,7 @@ void *vector_set(struct Vector *vector, size_t index, void *item)
226236

227237
void *vector_get(struct Vector *vector, size_t index)
228238
{
229-
if (vector_is_released(vector))
239+
if (vector == NULL)
230240
{
231241
return(NULL);
232242
}
@@ -248,7 +258,7 @@ bool vector_prepend(struct Vector *vector, void *item)
248258

249259
bool vector_insert(struct Vector *vector, size_t index, void *item)
250260
{
251-
if (vector_is_released(vector))
261+
if (vector == NULL)
252262
{
253263
return(false);
254264
}
@@ -294,7 +304,7 @@ bool vector_insert(struct Vector *vector, size_t index, void *item)
294304

295305
void *vector_remove(struct Vector *vector, size_t index)
296306
{
297-
if (vector_is_released(vector))
307+
if (vector == NULL)
298308
{
299309
return(NULL);
300310
}
@@ -320,7 +330,7 @@ void *vector_remove(struct Vector *vector, size_t index)
320330

321331
static bool _vector_clear(struct Vector *vector)
322332
{
323-
if (vector_is_released(vector))
333+
if (vector == NULL)
324334
{
325335
return(false);
326336
}
@@ -353,6 +363,11 @@ static bool _vector_clear(struct Vector *vector)
353363

354364
static bool _vector_set_capacity_with_buffer(struct Vector *vector, size_t min_size)
355365
{
366+
if (vector == NULL)
367+
{
368+
return(false);
369+
}
370+
356371
if (min_size > vector->capacity)
357372
{
358373
size_t new_size = vector->size * 2;
@@ -372,7 +387,7 @@ static bool _vector_set_capacity_with_buffer(struct Vector *vector, size_t min_s
372387

373388
static bool _vector_set_capacity(struct Vector *vector, const size_t size)
374389
{
375-
if (!vector->allow_resize)
390+
if (vector == NULL || !vector->allow_resize)
376391
{
377392
return(false);
378393
}

tests/test_capacity_null.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
#include "test.h"
2+
#include "vector.h"
3+
4+
5+
void test_impl()
6+
{
7+
assert_num_equal(vector_capacity(NULL), 0);
8+
}
9+
10+
11+
int main()
12+
{
13+
test_run(test_impl);
14+
}
15+

tests/test_is_allow_resize_null.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
#include "test.h"
2+
#include "vector.h"
3+
4+
5+
void test_impl()
6+
{
7+
assert_true(!vector_is_allow_resize(NULL));
8+
}
9+
10+
11+
int main()
12+
{
13+
test_run(test_impl);
14+
}
15+

tests/test_is_empty_null.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
#include "test.h"
2+
#include "vector.h"
3+
4+
5+
void test_impl()
6+
{
7+
assert_true(vector_is_empty(NULL));
8+
}
9+
10+
11+
int main()
12+
{
13+
test_run(test_impl);
14+
}
15+

tests/test_new.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ void test_impl()
66
{
77
struct Vector *vector = vector_new();
88

9-
assert_true(!vector_is_released(vector));
109
assert_true(vector_is_empty(vector));
1110
assert_num_equal(vector_size(vector), 0);
1211
assert_num_equal(vector_capacity(vector), 20);

tests/test_new_with_options_no_resize.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ void test_impl()
66
{
77
struct Vector *vector = vector_new_with_options(50, false);
88

9-
assert_true(!vector_is_released(vector));
109
assert_true(vector_is_empty(vector));
1110
assert_num_equal(vector_size(vector), 0);
1211
assert_num_equal(vector_capacity(vector), 50);

tests/test_new_with_options_with_resize.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ void test_impl()
66
{
77
struct Vector *vector = vector_new_with_options(50, true);
88

9-
assert_true(!vector_is_released(vector));
109
assert_true(vector_is_empty(vector));
1110
assert_num_equal(vector_size(vector), 0);
1211
assert_num_equal(vector_capacity(vector), 50);

tests/test_size_null.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
#include "test.h"
2+
#include "vector.h"
3+
4+
5+
void test_impl()
6+
{
7+
assert_num_equal(vector_size(NULL), 0);
8+
}
9+
10+
11+
int main()
12+
{
13+
test_run(test_impl);
14+
}
15+

0 commit comments

Comments
 (0)