Skip to content

Commit 08e2745

Browse files
committed
Updated documentation and removed old assert code.
1 parent 2e4e98a commit 08e2745

File tree

4 files changed

+43
-60
lines changed

4 files changed

+43
-60
lines changed

Array.cpp

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,3 @@
88
#include "Array.h"
99

1010

11-
// handle diagnostic informations given by assertion and abort program execution:
12-
// void __assert(const char *__func, const char *__file, int __lineno, const char *__sexp)
13-
// {
14-
// // transmit diagnostic informations through serial link.
15-
// // Serial.println(__func);
16-
// // Serial.println(__file);
17-
// // Serial.println(__lineno, DEC);
18-
// // Serial.println(__sexp);
19-
// Serial.println("Attempted to access out of bounds Array element!");
20-
// Serial.println("Check indicies or increase Array size.");
21-
// Serial.flush();
22-
// // abort program execution.
23-
// abort();
24-
// }

Array.h

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,39 +12,33 @@
1212
#else
1313
#include "WProgram.h"
1414
#endif
15-
// #define __ASSERT_USE_STDERR
16-
// #include <assert.h>
1715

18-
19-
// // handle diagnostic informations given by assertion and abort program execution:
20-
// void __assert(const char *__func, const char *__file, int __lineno, const char *__sexp);
21-
22-
template <typename T, unsigned int max_size_>
16+
template <typename T, size_t max_size_>
2317
class Array
2418
{
2519
public:
2620
Array();
2721
Array(const T &value);
2822
Array(const T (&values)[max_size_]);
29-
T& operator[](const unsigned int i);
30-
T& at(const unsigned int i);
23+
T& operator[](const size_t i);
24+
T& at(const size_t i);
3125
T& front();
3226
T& back();
3327
void clear();
3428
void fill(const T &value);
3529
void fill(const T (&values)[max_size_]);
36-
void assign(const unsigned int n, const T &value);
37-
void assign(const unsigned int n, const T values[]);
30+
void assign(const size_t n, const T &value);
31+
void assign(const size_t n, const T values[]);
3832
void push_back(const T &value);
3933
void pop_back();
40-
unsigned int size();
41-
unsigned int max_size();
34+
size_t size();
35+
size_t max_size();
4236
bool empty();
4337
bool full();
4438

4539
private:
4640
T values_[max_size_];
47-
unsigned int size_;
41+
size_t size_;
4842
};
4943
#include "ArrayDefinitions.h"
5044

ArrayDefinitions.h

Lines changed: 27 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -9,73 +9,70 @@
99
#define ARRAY_DEFINITIONS_H
1010

1111

12-
template <typename T, unsigned int max_size_>
12+
template <typename T, size_t max_size_>
1313
Array<T,max_size_>::Array()
1414
{
1515
clear();
1616
}
1717

18-
template <typename T, unsigned int max_size_>
18+
template <typename T, size_t max_size_>
1919
Array<T,max_size_>::Array(const T &value)
2020
{
2121
fill(value);
2222
}
2323

24-
template <typename T, unsigned int max_size_>
24+
template <typename T, size_t max_size_>
2525
Array<T, max_size_>::Array(const T (&values)[max_size_])
2626
{
2727
fill(values);
2828
}
2929

30-
template <typename T, unsigned int max_size_>
31-
T& Array<T, max_size_>::operator[](const unsigned int i)
30+
template <typename T, size_t max_size_>
31+
T& Array<T, max_size_>::operator[](const size_t i)
3232
{
3333
return values_[i];
3434
}
3535

36-
template <typename T, unsigned int max_size_>
37-
T& Array<T, max_size_>::at(const unsigned int i)
36+
template <typename T, size_t max_size_>
37+
T& Array<T, max_size_>::at(const size_t i)
3838
{
39-
// assert((i>=0) && (i<size_));
4039
return values_[i];
4140
}
4241

43-
template <typename T, unsigned int max_size_>
42+
template <typename T, size_t max_size_>
4443
T& Array<T, max_size_>::front()
4544
{
46-
// assert(!empty());
4745
return values_[0];
4846
}
4947

50-
template <typename T, unsigned int max_size_>
48+
template <typename T, size_t max_size_>
5149
T& Array<T, max_size_>::back()
5250
{
53-
// assert(!empty());
5451
return values_[size_-1];
5552
}
5653

57-
template <typename T, unsigned int max_size_>
54+
template <typename T, size_t max_size_>
5855
void Array<T, max_size_>::clear()
5956
{
6057
size_ = 0;
6158
}
6259

63-
template <typename T, unsigned int max_size_>
60+
template <typename T, size_t max_size_>
6461
void Array<T, max_size_>::fill(const T &value)
6562
{
6663
assign(max_size_,value);
6764
}
6865

69-
template <typename T, unsigned int max_size_>
66+
template <typename T, size_t max_size_>
7067
void Array<T, max_size_>::fill(const T (&values)[max_size_])
7168
{
7269
assign(max_size_,values);
7370
}
7471

75-
template <typename T, unsigned int max_size_>
76-
void Array<T, max_size_>::assign(const unsigned int n, const T &value)
72+
template <typename T, size_t max_size_>
73+
void Array<T, max_size_>::assign(const size_t n, const T &value)
7774
{
78-
unsigned int assign_size = n;
75+
size_t assign_size = n;
7976
if ((n > size_) && (n <= max_size_))
8077
{
8178
size_ = n;
@@ -85,16 +82,16 @@ void Array<T, max_size_>::assign(const unsigned int n, const T &value)
8582
size_ = max_size_;
8683
assign_size = max_size_;
8784
}
88-
for (unsigned int i=0; i<assign_size; i++)
85+
for (size_t i=0; i<assign_size; i++)
8986
{
9087
values_[i] = value;
9188
}
9289
}
9390

94-
template <typename T, unsigned int max_size_>
95-
void Array<T, max_size_>::assign(const unsigned int n, const T values[])
91+
template <typename T, size_t max_size_>
92+
void Array<T, max_size_>::assign(const size_t n, const T values[])
9693
{
97-
unsigned int assign_size = n;
94+
size_t assign_size = n;
9895
if ((n > size_) && (n <= max_size_))
9996
{
10097
size_ = n;
@@ -107,7 +104,7 @@ void Array<T, max_size_>::assign(const unsigned int n, const T values[])
107104
memcpy((void*) values_, (void*) values, assign_size*sizeof(T));
108105
}
109106

110-
template <typename T, unsigned int max_size_>
107+
template <typename T, size_t max_size_>
111108
void Array<T, max_size_>::push_back(const T &value)
112109
{
113110
if (size_ < max_size_)
@@ -116,7 +113,7 @@ void Array<T, max_size_>::push_back(const T &value)
116113
}
117114
}
118115

119-
template <typename T, unsigned int max_size_>
116+
template <typename T, size_t max_size_>
120117
void Array<T, max_size_>::pop_back()
121118
{
122119
if (size_ > 0)
@@ -125,25 +122,25 @@ void Array<T, max_size_>::pop_back()
125122
}
126123
}
127124

128-
template <typename T, unsigned int max_size_>
129-
unsigned int Array<T, max_size_>::size()
125+
template <typename T, size_t max_size_>
126+
size_t Array<T, max_size_>::size()
130127
{
131128
return size_;
132129
}
133130

134-
template <typename T, unsigned int max_size_>
135-
unsigned int Array<T, max_size_>::max_size()
131+
template <typename T, size_t max_size_>
132+
size_t Array<T, max_size_>::max_size()
136133
{
137134
return max_size_;
138135
}
139136

140-
template <typename T, unsigned int max_size_>
137+
template <typename T, size_t max_size_>
141138
bool Array<T, max_size_>::empty()
142139
{
143140
return size_ == 0;
144141
}
145142

146-
template <typename T, unsigned int max_size_>
143+
template <typename T, size_t max_size_>
147144
bool Array<T, max_size_>::full()
148145
{
149146
return size_ == max_size_;

README.md

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,14 @@ License:
88

99
BSD
1010

11-
An array container like the C++
12-
[std::array](http://en.cppreference.com/w/cpp/container/array).
11+
An array container similar to the C++
12+
[std::array](http://www.cplusplus.com/reference/array/array/), with
13+
some [std::vector](http://www.cplusplus.com/reference/vector/vector/)
14+
methods added. The maximum size is fixed as a template parameter, but
15+
the size is variable, like a vector. Values can be pushed and popped
16+
and the size adjusts accordingly. The data are stored internally as a
17+
statically allocated c style array. Care must be taken not to
18+
dereference an empty array or access elements beyond bounds.
1319

1420
[Usage Examples](./examples)
1521

0 commit comments

Comments
 (0)