A :cpp:class:`FSTR::Vector` is an array of Object pointers.
A key use for this is the construction of string tables.
Inline Strings are not supported, so the content has to be defined first:
DEFINE_FSTR_LOCAL(str1, "Test string #1");
DEFINE_FSTR_LOCAL(str2, "Test string #2");
IMPORT_FSTR_LOCAL(str3, PROJECT_DIR "/files/somedata.json");Now we can define the Vector:
#include <FlashString/Vector.hpp>
DEFINE_FSTR_VECTOR(myTable, FlashString,
&str1,
&str2,
nullptr,
&str3
);Note the use of nullptr to indicate an invalid vector entry, as distinct from an empty String.
Now we can access the data using Vector methods:
debugf("table.length() = %u", table.length());
debugf("fstr1 = '%s'", String(table[0]).c_str());
debugf("fstr2.length() = %u", table[1].length());
debugf("fstr3.length() = %u", table[2].length());You can share Vectors between translation units by declaring it in a header:
DECLARE_FSTR_VECTOR(table);To search a Vector:
int i = table.indexOf("TEST STRING #1");Note
By default, searches in Vector<String> are not case-sensitive.
The indexOf method has an extra ignoreCase parameter, which defaults to true.
The above example generates a structure like this:
constexpr const struct {
Vector<String*> object;
String* entries[4];
} __fstr__myTable PROGMEM = {
{16},
&str1,
&str2,
nullptr,
&str3,
};
const Vector<String>& myTable PROGMEM = __fstr__myTable.object;Note: FSTR:: namespace qualifier omitted for clarity.
.. doxygengroup:: fstr_vector
:content-only:
.. doxygenclass:: FSTR::Vector
:members: