Skip to content

Commit fd4a984

Browse files
authored
Merge pull request #2 from devinconley/templated-references
Templated references
2 parents b1418c3 + aff8389 commit fd4a984

File tree

9 files changed

+322
-239
lines changed

9 files changed

+322
-239
lines changed

Plotter/Plotter.cpp

Lines changed: 116 additions & 124 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,20 @@
1111
1212
The library, these listeners, a quick-start guide, and usage examples are available at:
1313
14-
https://github.com/devinconley/ArduinoPlotter
14+
https://github.com/devinconley/Arduino-Plotter
1515
1616
-------------------------------------------------------------------------------------------
1717
Plotter
18-
v1.1.0
19-
https://github.com/devinconley/ArduinoPlotter
18+
v2.0.0
19+
https://github.com/devinconley/Arduino-Plotter
2020
by Devin Conley
2121
===========================================================================================
2222
*/
2323

2424
#include "Plotter.h"
2525

26+
// Plotter
27+
2628
Plotter::Plotter() {
2729
Serial.begin(115200);
2830
head = NULL;
@@ -33,145 +35,135 @@ Plotter::Plotter() {
3335
last_updated = millis();
3436
}
3537

36-
Plotter::~Plotter() {
37-
GraphNode* temp = head;
38-
GraphNode* temp_next;
39-
while (temp->next) {
40-
temp_next = temp->next;
38+
Plotter::~Plotter()
39+
{
40+
Graph * temp = head;
41+
Graph * temp_next;
42+
while (temp->next)
43+
{
44+
temp_next = temp->next;
45+
delete temp;
46+
temp = temp_next;
47+
}
4148
delete temp;
42-
temp = temp_next;
43-
}
44-
delete temp;
45-
}
46-
47-
void Plotter::addTimeGraph(String title, int points_displayed, String labelA, double & refA) {
48-
String labels[] = {labelA};
49-
double* refs[] = {&refA};
50-
addGraphHelper(title, labels, refs, 1, false, points_displayed);
5149
}
5250

53-
void Plotter::addTimeGraph(String title, int points_displayed, String labelA, double & refA,
54-
String labelB, double & refB) {
55-
String labels[] = {labelA, labelB};
56-
double* refs[] = {&refA, &refB};
57-
addGraphHelper(title, labels, refs, 2, false, points_displayed);
51+
void Plotter::addGraphHelper(String title, VarWrapper * wrappers, int sz, bool xvy, int points_displayed) {
52+
Graph * temp = new Graph( title, wrappers, sz, xvy, points_displayed );
53+
if (head)
54+
{
55+
tail->next = temp;
56+
tail = temp;
57+
}
58+
else
59+
{
60+
head = temp;
61+
tail = temp;
62+
}
63+
64+
total_size += sz;
65+
num_graphs++;
66+
if (points_displayed > max_points_displayed)
67+
{
68+
max_points_displayed = points_displayed;
69+
}
70+
71+
last_updated = millis();
5872
}
5973

60-
void Plotter::addTimeGraph(String title, int points_displayed, String labelA, double & refA,
61-
String labelB, double & refB, String labelC, double & refC) {
62-
String labels[] = {labelA, labelB, labelC};
63-
double* refs[] = {&refA, &refB, &refC};
64-
addGraphHelper(title, labels, refs, 3, false, points_displayed);
74+
bool Plotter::remove(int index) {
75+
if (num_graphs == 0 || index < 0 || num_graphs <= index)
76+
{
77+
return false;
78+
}
79+
else
80+
{
81+
Graph * temp = head;
82+
if (index == 0)
83+
{
84+
head = head->next;
85+
delete temp;
86+
}
87+
else
88+
{
89+
Graph * last = temp;
90+
for (int i = 0; i < index; i++)
91+
{
92+
last = temp;
93+
temp = temp->next;
94+
}
95+
last->next = temp->next;
96+
num_graphs--;
97+
total_size -= temp->size;
98+
delete temp;
99+
}
100+
last_updated = millis();
101+
return true;
102+
}
65103
}
66104

67-
void Plotter::addTimeGraph(String title, int points_displayed, String labelA, double & refA,
68-
String labelB, double & refB, String labelC, double & refC,
69-
String labelD, double & refD) {
70-
String labels[] = {labelA, labelB, labelC, labelD};
71-
double* refs[] = {&refA, &refB, &refC, &refD};
72-
addGraphHelper(title, labels, refs, 4, false, points_displayed);
105+
void Plotter::plot() {
106+
String code = OUTER_KEY;
107+
code += (num_graphs + INNER_KEY + total_size + INNER_KEY
108+
+ max_points_displayed + INNER_KEY + last_updated + INNER_KEY);
109+
Serial.print(code);
110+
Graph * temp = head;
111+
while (temp != NULL)
112+
{
113+
Serial.println();
114+
temp->plot();
115+
temp = temp->next;
116+
}
117+
Serial.println(OUTER_KEY);
73118
}
74119

75-
void Plotter::addTimeGraph(String title, int points_displayed, String labelA, double & refA,
76-
String labelB, double & refB, String labelC, double & refC,
77-
String labelD, double & refD, String labelE, double & refE) {
78-
String labels[] = {labelA, labelB, labelC, labelD, labelE};
79-
double* refs[] = {&refA, &refB, &refC, &refD, &refE};
80-
addGraphHelper(title, labels, refs, 5, false, points_displayed);
81-
}
120+
// Graph
82121

83-
void Plotter::addTimeGraph(String title, int points_displayed, String labelA, double & refA,
84-
String labelB, double & refB, String labelC, double & refC,
85-
String labelD, double & refD, String labelE, double & refE,
86-
String labelF, double & refF) {
87-
String labels[] = {labelA, labelB, labelC, labelD, labelE, labelF};
88-
double* refs[] = {&refA, &refB, &refC, &refD, &refE, &refF};
89-
addGraphHelper(title, labels, refs, 6, false, points_displayed);
90-
}
91-
92-
void Plotter::addXYGraph(String title, int points_displayed, String labelX, double & refX,
93-
String labelY, double & refY) {
94-
String labels[] = {labelX, labelY};
95-
double* refs[] = {&refX, &refY};
96-
addGraphHelper(title, labels, refs, 2, true, points_displayed);
97-
}
122+
Plotter::Graph::Graph(String title, VarWrapper * wrappers, int size, bool xvy, int points_displayed) :
123+
title( title ),
124+
wrappers( wrappers ),
125+
size( size ),
126+
xvy( xvy ),
127+
points_displayed( points_displayed ),
128+
next( NULL )
129+
{}
98130

99-
void Plotter::addGraphHelper(String title, String labels[], double* refs[], int sz, bool xvy, int points_displayed) {
100-
GraphNode* temp = new GraphNode(title, labels, refs, sz, xvy, points_displayed);
101-
if (head) {
102-
tail->next = temp;
103-
tail = temp;
104-
} else {
105-
head = temp;
106-
tail = temp;
107-
}
108-
109-
total_size += sz;
110-
num_graphs++;
111-
if (points_displayed > max_points_displayed) {
112-
max_points_displayed = points_displayed;
113-
}
114-
last_updated = millis();
131+
Plotter::Graph::~Graph()
132+
{
133+
delete[] wrappers;
115134
}
116135

117-
bool Plotter::remove(int index) {
118-
if (num_graphs == 0 || index < 0 || num_graphs <= index) {
119-
return false;
120-
} else {
121-
GraphNode* temp = head;
122-
if (index == 0) {
123-
head = head->next;
124-
delete temp;
125-
} else {
126-
GraphNode* last = temp;
127-
for (int i = 0; i < index; i++) {
128-
last = temp;
129-
temp = temp->next;
130-
}
131-
last->next = temp->next;
132-
num_graphs--;
133-
total_size -= temp->size;
134-
delete temp;
136+
void Plotter::Graph::plot() {
137+
Serial.print(title); Serial.print(INNER_KEY);
138+
Serial.print(xvy); Serial.print(INNER_KEY);
139+
Serial.print(points_displayed); Serial.print(INNER_KEY);
140+
Serial.print(size); Serial.print(INNER_KEY);
141+
for (int i = 0; i < size; i++)
142+
{
143+
Serial.print( wrappers[i].GetLabel() ); Serial.print(INNER_KEY);
144+
Serial.print( wrappers[i].GetValue() ); Serial.print(INNER_KEY);
135145
}
136-
last_updated = millis();
137-
return true;
138-
}
139146
}
140147

141-
void Plotter::plot() {
142-
String code = OUTER_KEY;
143-
code += (num_graphs + INNER_KEY + total_size + INNER_KEY
144-
+ max_points_displayed + INNER_KEY + last_updated + INNER_KEY);
145-
Serial.print(code);
146-
GraphNode* temp = head;
147-
while (temp != NULL) {
148-
Serial.println();
149-
temp->plot();
150-
temp = temp->next;
151-
}
152-
Serial.println(OUTER_KEY);
153-
}
148+
// VariableWrapper
149+
150+
Plotter::VarWrapper::VarWrapper() :
151+
ref( NULL ),
152+
deref( NULL )
153+
{}
154154

155+
Plotter::VarWrapper::VarWrapper( String label, void * ref, double ( * deref )( void * ) ) :
156+
label( label ),
157+
ref ( ref ),
158+
deref ( deref )
159+
{}
155160

156-
Plotter::GraphNode::GraphNode(String title, String* _labels, double** _refs, int size, bool xvy,
157-
int points_displayed) : title(title), size(size), xvy(xvy),
158-
points_displayed(points_displayed) {
159-
next = NULL;
160-
labels = new String[size];
161-
refs = new double*[size];
162-
for (int i = 0; i < size; i++) {
163-
labels[i] = _labels[i];
164-
refs[i] = _refs[i];
165-
}
161+
String Plotter::VarWrapper::GetLabel()
162+
{
163+
return label;
166164
}
167165

168-
void Plotter::GraphNode::plot() {
169-
Serial.print(title); Serial.print(INNER_KEY);
170-
Serial.print(xvy); Serial.print(INNER_KEY);
171-
Serial.print(points_displayed); Serial.print(INNER_KEY);
172-
Serial.print(size); Serial.print(INNER_KEY);
173-
for (int i = 0; i < size; i++) {
174-
Serial.print(labels[i]); Serial.print(INNER_KEY);
175-
Serial.print(*(refs[i])); Serial.print(INNER_KEY);
176-
}
166+
double Plotter::VarWrapper::GetValue()
167+
{
168+
return deref( ref );
177169
}

0 commit comments

Comments
 (0)