Skip to content

Commit 6adad81

Browse files
committed
Namespace internal functions, remove SWAP macro so it doesnt leak
1 parent adcda4d commit 6adad81

File tree

1 file changed

+26
-18
lines changed

1 file changed

+26
-18
lines changed

ArduinoSort.h

Lines changed: 26 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33

44
#include "Arduino.h"
55

6+
/**** These are the functions you can use ****/
7+
68
// Sort an array
79
template<typename AnyType> void sortArray(AnyType array[], size_t sizeOfArray);
810

@@ -15,40 +17,46 @@ template<typename AnyType> void sortArray(AnyType array[], size_t sizeOfArray, b
1517
// Sort in reverse with custom comparison function
1618
template<typename AnyType> void sortArrayReverse(AnyType array[], size_t sizeOfArray, bool (*largerThan)(AnyType, AnyType));
1719

18-
/**** Implementation below ****/
1920

20-
#define SWAP(x, y, T) do { T SWAP = x; x = y; y = SWAP; } while (0)
2121

22-
template<typename AnyType> bool builtinLargerThan(AnyType first, AnyType second) {
23-
return first > second;
24-
}
2522

26-
template<> bool builtinLargerThan(char* first, char* second) {
27-
return strcmp(first, second) > 0;
28-
}
2923

30-
template<typename AnyType> void insertionSort(AnyType array[], size_t sizeOfArray, bool reverse, bool (*largerThan)(AnyType, AnyType)) {
31-
for (size_t i = 1; i < sizeOfArray; i++) {
32-
for (size_t j = i; j > 0 && (largerThan(array[j-1], array[j]) != reverse); j--) {
33-
SWAP(array[j-1], array[j], AnyType);
34-
}
35-
}
24+
/**** Implementation below. Do not use below functions ****/
25+
26+
namespace ArduinoSort {
27+
template<typename AnyType> bool builtinLargerThan(AnyType first, AnyType second) {
28+
return first > second;
29+
}
30+
31+
template<> bool builtinLargerThan(char* first, char* second) {
32+
return strcmp(first, second) > 0;
33+
}
34+
35+
template<typename AnyType> void insertionSort(AnyType array[], size_t sizeOfArray, bool reverse, bool (*largerThan)(AnyType, AnyType)) {
36+
for (size_t i = 1; i < sizeOfArray; i++) {
37+
for (size_t j = i; j > 0 && (largerThan(array[j-1], array[j]) != reverse); j--) {
38+
AnyType tmp = array[j-1];
39+
array[j-1] = array[j];
40+
array[j] = tmp;
41+
}
42+
}
43+
}
3644
}
3745

3846
template<typename AnyType> void sortArray(AnyType array[], size_t sizeOfArray) {
39-
insertionSort(array, sizeOfArray, false, builtinLargerThan);
47+
ArduinoSort::insertionSort(array, sizeOfArray, false, ArduinoSort::builtinLargerThan);
4048
}
4149

4250
template<typename AnyType> void sortArrayReverse(AnyType array[], size_t sizeOfArray) {
43-
insertionSort(array, sizeOfArray, true, builtinLargerThan);
51+
ArduinoSort::insertionSort(array, sizeOfArray, true, ArduinoSort::builtinLargerThan);
4452
}
4553

4654
template<typename AnyType> void sortArray(AnyType array[], size_t sizeOfArray, bool (*largerThan)(AnyType, AnyType)) {
47-
insertionSort(array, sizeOfArray, false, largerThan);
55+
ArduinoSort::insertionSort(array, sizeOfArray, false, largerThan);
4856
}
4957

5058
template<typename AnyType> void sortArrayReverse(AnyType array[], size_t sizeOfArray, bool (*largerThan)(AnyType, AnyType)) {
51-
insertionSort(array, sizeOfArray, true, largerThan);
59+
ArduinoSort::insertionSort(array, sizeOfArray, true, largerThan);
5260
}
5361

5462

0 commit comments

Comments
 (0)