Skip to content
Snippets Groups Projects
Commit 39e7de8e authored by Tom Tiltmann's avatar Tom Tiltmann
Browse files

fix warnings

parent e8da1e88
No related branches found
No related tags found
No related merge requests found
...@@ -44,7 +44,6 @@ void setup() ...@@ -44,7 +44,6 @@ void setup()
{ {
table.printRow(rows[i]); table.printRow(rows[i]);
} }
} }
void loop() void loop()
......
...@@ -18,43 +18,41 @@ public: ...@@ -18,43 +18,41 @@ public:
String buildHeader() String buildHeader()
{ {
return buildLine('-') + buildRow(const_cast<char **>(headers), '='); // Kopfzeile mit '=' return buildLine('-') + buildRow(headers, '='); // Kopfzeile mit '='
} }
//const_cast<char **>(...)
void printRow(char **t_row) void printRow(const char **t_row)
{ {
String row = buildRow(t_row); String row = buildRow(t_row);
Serial.print(row); Serial.print(row);
} }
String buildRow(char **t_row, char line = '-') String buildRow(const char **t_row, char line = '-')
{ {
String output; String output;
char buffer[256]; char buffer[MAX_STRING_SIZE];
int maxLines = 1; // Maximale Anzahl Zeilen über alle Spalten int maxLines = 1; // Maximale Anzahl Zeilen über alle Spalten
char tempBuffers[size][MAX_STRING_SIZE]; // Array to store processed strings
// Erste Phase: Teile jede Zelle in Zeilen und finde maximale Zeilenzahl // Erste Phase: Verarbeite jede Zelle und finde maximale Zeilenzahl
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
{ {
if (doReplaceUmlauts)
replaceUmlauts(t_row[i]);
safeStringCopy(buffer, t_row[i], sizeof(buffer)); safeStringCopy(buffer, t_row[i], sizeof(buffer));
if (doReplaceUmlauts)
replaceUmlauts(buffer);
if (doTruncateText) if (doTruncateText)
{ truncateToColumnWidth(buffer, columnWidths[i], tempBuffers[i]);
truncateToColumnWidth(buffer, columnWidths[i], buffer);
}
else else
{ splitStringByLength(buffer, columnWidths[i], tempBuffers[i]);
splitStringByLength(buffer, columnWidths[i], buffer);
}
// Zähle Zeilen in dieser Zelle // Zähle Zeilen in dieser Zelle
int lineCount = 1; int lineCount = 1;
for (size_t j = 0; j < displayLength(buffer); j++) for (size_t j = 0; j < displayLength(tempBuffers[i]); j++)
{ {
if (buffer[j] == '\n') if (tempBuffers[i][j] == '\n')
lineCount++; lineCount++;
} }
if (lineCount > maxLines) if (lineCount > maxLines)
...@@ -62,43 +60,26 @@ public: ...@@ -62,43 +60,26 @@ public:
} }
// Zweite Phase: Baue die Zeilen auf // Zweite Phase: Baue die Zeilen auf
for (int line = 0; line < maxLines; line++) for (int lineNum = 0; lineNum < maxLines; lineNum++)
{ {
output += "|"; output += "|";
// Gehe durch jede Spalte // Gehe durch jede Spalte
for (size_t col = 0; col < size; ++col) for (size_t col = 0; col < size; ++col)
{ {
if (replaceUmlauts)
{
safeStringCopy(buffer, t_row[col], sizeof(buffer));
replaceUmlauts(buffer);
}
else
{
safeStringCopy(buffer, t_row[col], sizeof(buffer));
}
if (doTruncateText)
{
truncateToColumnWidth(t_row[col], columnWidths[col], buffer);
}
else
{
splitStringByLength(t_row[col], columnWidths[col], buffer);
}
// Finde die aktuelle Zeile für diese Spalte // Finde die aktuelle Zeile für diese Spalte
char *currentLine = buffer; char *currentLine = tempBuffers[col];
int currentLineNum = 0; int currentLineNum = 0;
char tempBuffer[256] = "";
while (currentLineNum < line) // Navigiere zur gewünschten Zeile
while (currentLineNum < lineNum)
{ {
char *newline = strchr(currentLine, '\n'); char *newline = strchr(currentLine, '\n');
if (newline == NULL) if (newline == NULL)
{ {
currentLine = ""; // Keine weitere Zeile vorhanden, leere Zeile verwenden
static char emptyBuffer[1] = {'\0'};
currentLine = emptyBuffer;
break; break;
} }
currentLine = newline + 1; currentLine = newline + 1;
...@@ -106,19 +87,20 @@ public: ...@@ -106,19 +87,20 @@ public:
} }
// Extrahiere die Zeile bis zum nächsten \n oder Ende // Extrahiere die Zeile bis zum nächsten \n oder Ende
char lineToPrint[MAX_STRING_SIZE] = "";
int j = 0; int j = 0;
while (currentLine[j] && currentLine[j] != '\n') while (currentLine[j] && currentLine[j] != '\n')
{ {
tempBuffer[j] = currentLine[j]; lineToPrint[j] = currentLine[j];
j++; j++;
} }
tempBuffer[j] = '\0'; lineToPrint[j] = '\0';
// Berechne die tatsächliche Anzeigelänge // Berechne die tatsächliche Anzeigelänge
int printedLength = displayLength(tempBuffer); int printedLength = displayLength(lineToPrint);
// Füge den Inhalt und die fehlenden Leerzeichen hinzu // Füge den Inhalt und die fehlenden Leerzeichen hinzu
output += tempBuffer; output += lineToPrint;
int spacesToAdd = columnWidths[col] - printedLength; int spacesToAdd = columnWidths[col] - printedLength;
for (int k = 0; k < spacesToAdd; k++) for (int k = 0; k < spacesToAdd; k++)
{ {
...@@ -147,11 +129,12 @@ public: ...@@ -147,11 +129,12 @@ public:
public: // private: //public für UnitTests! public: // private: //public für UnitTests!
const char **headers; const char **headers;
const int *columnWidths; const int *columnWidths;
const int MAX_STRING_SIZE = 256;
size_t size; size_t size;
bool doTruncateText = false; bool doTruncateText = false;
bool doReplaceUmlauts = false; bool doReplaceUmlauts = false;
static int displayLength(const char *text) static unsigned int displayLength(const char *text)
{ {
int length = 0; int length = 0;
for (int i = 0; text[i] != '\0'; ++i) for (int i = 0; text[i] != '\0'; ++i)
...@@ -202,8 +185,8 @@ public: // private: //public für UnitTests! ...@@ -202,8 +185,8 @@ public: // private: //public für UnitTests!
if (!buffer) if (!buffer)
return; return;
int k = 0; // Position im Ausgabepuffer unsigned int k = 0; // Position im Ausgabepuffer
int i = 0; // Position im Eingabetext unsigned int i = 0; // Position im Eingabetext
while (text[i] != '\0') while (text[i] != '\0')
{ {
...@@ -241,7 +224,6 @@ public: // private: //public für UnitTests! ...@@ -241,7 +224,6 @@ public: // private: //public für UnitTests!
free(buffer); free(buffer);
} }
// Neue Version von splitStringByLength
static void splitStringByLength(const char *input, int L, char *output) static void splitStringByLength(const char *input, int L, char *output)
{ {
int len = strlen(input); int len = strlen(input);
...@@ -315,7 +297,7 @@ public: // private: //public für UnitTests! ...@@ -315,7 +297,7 @@ public: // private: //public für UnitTests!
return maxLines; return maxLines;
} }
const char *getRowSegment(const char *text, int width, size_t line, char *buffer) const char *getRowSegment(const char *text, unsigned int width, size_t line, char *buffer)
{ {
size_t textLength = strlen(text); size_t textLength = strlen(text);
size_t lineStart = 0; size_t lineStart = 0;
......
...@@ -13,16 +13,16 @@ test(SplitStringNoNewlines) ...@@ -13,16 +13,16 @@ test(SplitStringNoNewlines)
// Überprüfung der Länge der Strings // Überprüfung der Länge der Strings
assertEqual(strlen(expectedOutput), strlen(actualOutput)); assertEqual(strlen(expectedOutput), strlen(actualOutput));
/*
// Zusätzliche Debug-Ausgabe, um Hex-Werte zu sehen // // Zusätzliche Debug-Ausgabe, um Hex-Werte zu sehen
for (size_t i = 0; i < strlen(actualOutput); ++i) // for (size_t i = 0; i < strlen(actualOutput); ++i)
{ // {
Serial.print("Expected: "); // Serial.print("Expected: ");
Serial.print((int)expectedOutput[i]); // Serial.print((int)expectedOutput[i]);
Serial.print(", Actual: "); // Serial.print(", Actual: ");
Serial.println((int)actualOutput[i]); // Serial.println((int)actualOutput[i]);
} // }
*/
assertEqual(String(expectedOutput), String(actualOutput)); assertEqual(String(expectedOutput), String(actualOutput));
} }
...@@ -113,7 +113,7 @@ test(truncateTextTest) ...@@ -113,7 +113,7 @@ test(truncateTextTest)
// Fall: Text wird abgeschnitten // Fall: Text wird abgeschnitten
strcpy(buffer, "HelloWorld!"); strcpy(buffer, "HelloWorld!");
table.truncateToColumnWidth(buffer, 5, buffer); table.truncateToColumnWidth(buffer, 5, buffer);
assertEqual("He...", buffer); assertEqual("Hel..", buffer);
} }
test(buildHeaderTest1) test(buildHeaderTest1)
...@@ -210,7 +210,7 @@ test(buildRowTest) ...@@ -210,7 +210,7 @@ test(buildRowTest)
const int columnWidths[] = {10, 5, 10}; const int columnWidths[] = {10, 5, 10};
SerialTable table(headers, columnWidths, 3); SerialTable table(headers, columnWidths, 3);
char *rows[] = {"Alice", "30", "Wonderland"}; const char *rows[] = {"Alice", "30", "Wonderland"};
// Verwende buildRow, um den Zeilen-String zu bekommen // Verwende buildRow, um den Zeilen-String zu bekommen
String rowOutput = table.buildRow(rows); String rowOutput = table.buildRow(rows);
...@@ -234,7 +234,7 @@ test(printRowWithMultipleLinesTest) ...@@ -234,7 +234,7 @@ test(printRowWithMultipleLinesTest)
const int columnWidths[] = {10, 5, 5}; const int columnWidths[] = {10, 5, 5};
SerialTable table(headers, columnWidths, 3); SerialTable table(headers, columnWidths, 3);
char *rows[] = {"Alice", "30", "Wonderland"}; const char *rows[] = {"Alice", "30", "Wonderland"};
// Verwende buildRow, um den Zeilen-String zu bekommen // Verwende buildRow, um den Zeilen-String zu bekommen
String rowOutput = table.buildRow(rows); String rowOutput = table.buildRow(rows);
...@@ -259,7 +259,7 @@ test(printRowWithLongTextTest) ...@@ -259,7 +259,7 @@ test(printRowWithLongTextTest)
const int columnWidths[] = {10, 5, 10}; const int columnWidths[] = {10, 5, 10};
SerialTable table(headers, columnWidths, 3); SerialTable table(headers, columnWidths, 3);
char *rows[] = {"A very long name", "12345", "A very long city name"}; const char *rows[] = {"A very long name", "12345", "A very long city name"};
// Verwende buildRow, um den Zeilen-String zu bekommen // Verwende buildRow, um den Zeilen-String zu bekommen
String rowOutput = table.buildRow(rows); String rowOutput = table.buildRow(rows);
...@@ -285,7 +285,7 @@ test(printEmptyRowTest) ...@@ -285,7 +285,7 @@ test(printEmptyRowTest)
const int columnWidths[] = {10, 5, 10}; const int columnWidths[] = {10, 5, 10};
SerialTable table(headers, columnWidths, 3); SerialTable table(headers, columnWidths, 3);
char *rows[] = {"", "", ""}; const char *rows[] = {"", "", ""};
// Verwende buildRow, um den Zeilen-String zu bekommen // Verwende buildRow, um den Zeilen-String zu bekommen
String rowOutput = table.buildRow(rows); String rowOutput = table.buildRow(rows);
...@@ -304,39 +304,39 @@ test(printEmptyRowTest) ...@@ -304,39 +304,39 @@ test(printEmptyRowTest)
} }
test(DisplayLengthBasic) { test(DisplayLengthBasic) {
assertEqual(5, SerialTable::displayLength("Hello")); assertEqual((unsigned int)5, SerialTable::displayLength("Hello"));
} }
test(DisplayLengthWithSpace) { test(DisplayLengthWithSpace) {
assertEqual(11, SerialTable::displayLength("Hello World")); assertEqual((unsigned int)11, SerialTable::displayLength("Hello World"));
} }
test(DisplayLengthWithUmlauts) { test(DisplayLengthWithUmlauts) {
// "Müller" in UTF-8 hat eine Länge von 6 Zeichen (ä zählt als 1 Zeichen) // "Müller" in UTF-8 hat eine Länge von 6 Zeichen (ä zählt als 1 Zeichen)
assertEqual(6, SerialTable::displayLength("Müller")); assertEqual((unsigned int)6, SerialTable::displayLength("Müller"));
} }
test(DisplayLengthOnlyUmlauts) { test(DisplayLengthOnlyUmlauts) {
// "äöü" in UTF-8 sollten jeweils als ein Zeichen zählen // "äöü" in UTF-8 sollten jeweils als ein Zeichen zählen
assertEqual(3, SerialTable::displayLength("äöü")); assertEqual((unsigned int)3, SerialTable::displayLength("äöü"));
} }
test(DisplayLengthUTF8Emojis) { test(DisplayLengthUTF8Emojis) {
// "😀😃😄" Emojis können mehrere Bytes haben, prüfen ob jedes nur als ein Zeichen gezählt wird // "😀😃😄" Emojis können mehrere Bytes haben, prüfen ob jedes nur als ein Zeichen gezählt wird
assertEqual(3, SerialTable::displayLength("😀😃😄")); assertEqual((unsigned int)3, SerialTable::displayLength("😀😃😄"));
} }
test(DisplayLengthWithNewline) { test(DisplayLengthWithNewline) {
// "Hello\nWorld" hat eine Länge von 11 Zeichen, da \n als einzelnes Zeichen zählt // "Hello\nWorld" hat eine Länge von 11 Zeichen, da \n als einzelnes Zeichen zählt
assertEqual(11, SerialTable::displayLength("Hello\nWorld")); assertEqual((unsigned int)11, SerialTable::displayLength("Hello\nWorld"));
} }
test(DisplayLengthEmptyString) { test(DisplayLengthEmptyString) {
// Ein leerer String sollte eine Länge von 0 haben // Ein leerer String sollte eine Länge von 0 haben
assertEqual(0, SerialTable::displayLength("")); assertEqual((unsigned int)0, SerialTable::displayLength(""));
} }
test(DisplayLengthSpaces) { test(DisplayLengthSpaces) {
// " " hat eine Länge von 3 Leerzeichen // " " hat eine Länge von 3 Leerzeichen
assertEqual(3, SerialTable::displayLength(" ")); assertEqual((unsigned int)3, SerialTable::displayLength(" "));
} }
...@@ -43,7 +43,6 @@ void setup() ...@@ -43,7 +43,6 @@ void setup()
{ {
table.printRow(rows[i]); table.printRow(rows[i]);
} }
} }
void loop() void loop()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment