Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Basic_Templates sample with CSV reader class #2403

Merged
merged 11 commits into from
Oct 26, 2021

Conversation

mikee47
Copy link
Contributor

@mikee47 mikee47 commented Oct 25, 2021

This PR aims to provide a clearer example of how to use templates.

It also updates the Formatter classes:

  • JSON string escaping needs to escape double-quotes, "
  • Standard format quote method needs to first escape any embedded quotes. Uses "" rather than " as it's CSV-compatible.
  • Add XML formatter with basic escaping

@slaff slaff added this to the 4.5.0 milestone Oct 26, 2021
@slaff slaff merged commit 56824c1 into SmingHub:develop Oct 26, 2021
@mikee47 mikee47 deleted the feature/Basic_Templates branch October 26, 2021 10:06
@slaff slaff mentioned this pull request Nov 16, 2021
5 tasks
slaff pushed a commit that referenced this pull request Jun 18, 2024
This PR extends the capabilities `CsvReader` class, introduced in #2403.

Goals:

- Extend testing, verify efficient use of memory
- Add Parser capability to allow filtering and processing of (very) large files streamed via network, in files, etc.
- Add seeking support to allow indexing, bookmarking, etc.
- Add iterator support

The code has been moved into a separate library.

Changes:

**Fix String move to avoid de-allocating buffers**
    
Use longer of two buffers for result. Example:

```
String s1 = "Greater than SSO buffer length";
String s2;
s1 = ""; // Buffer remains allocated
s2 = std::move(s1); // The move we need to fix
```

At present this move will result in s1's buffer being de-allocated.
This can lead to performance degratation due to subsequent memory reallocations
where a String is being passed around as a general buffer.

This change uses the larger of the two buffers when deciding how to behave.
Checks added to HostTests to enforce predictable behaviour.


**Add CStringArray::release method**

Allows efficient conversion to a regular `String` object for manipulation.

**Fix CStringArray operator+=**

Must take reference, not copy - inefficient and fails when used with FlashString.

**Move CsvReader into separate library**

The `CsvReader` class has been moved out of `Core/Data` and into `CsvReader`
which has additional capabilities. Changes to existing code:

- Add ``CsvReader`` to your project's :cpp:envvar:`COMPONENT_DEPENDS`
- Change ``#include <Data/CsvReader>`` to ``#include <CSV/Reader.h>``
- Change ``CsvReader`` class to :cpp:class:`CSV::Reader`
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants