48 if (num != other.
size())
51 for (
int i = 0;
i < num; ++
i)
61 for (
int j =
i;
j < num; ++
j)
78 return ! operator== (other);
93 return defaultReturnValue;
118 for (
int i = 0;
i < other.
size(); ++
i)
153 for (
int i = 0;
i <
keys.size(); ++
i)
166 keys.minimiseStorageOverheads();
167 values.minimiseStorageOverheads();
170template <
typename Map>
177 std::map<String, int> contents;
179 const auto normaliseKey = [
this] (
const String&
key)
184 for (
auto i = 0;
i !=
size(); ++
i)
185 contents.emplace (normaliseKey (
getAllKeys().getReference (
i)),
i);
187 for (
const auto& pair : toAdd)
189 const auto key = normaliseKey (pair.first);
190 const auto it = contents.find (
key);
192 if (it != contents.cend())
194 values.getReference (it->second) = pair.second;
198 contents.emplace (
key,
static_cast<int> (contents.size()));
199 keys.add (pair.first);
212static String operator""_S (
const char* chars,
size_t)
217class StringPairArrayTests :
public UnitTest
220 StringPairArrayTests()
221 : UnitTest (
"StringPairArray", UnitTestCategories::
text)
224 void runTest()
override
226 beginTest (
"addMap respects case sensitivity of StringPairArray");
228 StringPairArray insensitive {
true };
229 insensitive.addMap ({ {
"duplicate",
"a" },
230 {
"Duplicate",
"b" } });
232 expect (insensitive.size() == 1);
233 expectEquals (insensitive[
"DUPLICATE"],
"a"_S);
235 StringPairArray sensitive {
false };
236 sensitive.addMap ({ {
"duplicate",
"a"_S },
237 {
"Duplicate",
"b"_S } });
239 expect (sensitive.size() == 2);
240 expectEquals (sensitive[
"duplicate"],
"a"_S);
241 expectEquals (sensitive[
"Duplicate"],
"b"_S);
242 expectEquals (sensitive[
"DUPLICATE"],
""_S);
245 beginTest (
"addMap overwrites existing pairs");
247 StringPairArray insensitive {
true };
248 insensitive.set (
"key",
"value");
249 insensitive.addMap ({ {
"KEY",
"VALUE" } });
251 expect (insensitive.size() == 1);
252 expectEquals (insensitive.getAllKeys()[0],
"key"_S);
253 expectEquals (insensitive.getAllValues()[0],
"VALUE"_S);
255 StringPairArray sensitive {
false };
256 sensitive.set (
"key",
"value");
257 sensitive.addMap ({ {
"KEY",
"VALUE" },
258 {
"key",
"another value" } });
260 expect (sensitive.size() == 2);
261 expect (sensitive.getAllKeys() == StringArray {
"key",
"KEY" });
262 expect (sensitive.getAllValues() == StringArray {
"another value",
"VALUE" });
265 beginTest (
"addMap doesn't change the order of existing keys");
267 StringPairArray array;
268 array.set (
"a",
"a");
269 array.set (
"z",
"z");
270 array.set (
"b",
"b");
271 array.set (
"y",
"y");
272 array.set (
"c",
"c");
274 array.addMap ({ {
"B",
"B" },
278 expect (array.getAllKeys() == StringArray {
"a",
"z",
"b",
"y",
"c",
"0" });
279 expect (array.getAllValues() == StringArray {
"a",
"Z",
"B",
"y",
"c",
"0" });
282 beginTest (
"addMap has equivalent behaviour to addArray");
284 StringPairArray initial;
285 initial.set (
"aaa",
"aaa");
286 initial.set (
"zzz",
"zzz");
287 initial.set (
"bbb",
"bbb");
289 auto withAddMap = initial;
290 withAddMap.addMap ({ {
"ZZZ",
"ZZZ" },
293 auto withAddArray = initial;
294 withAddArray.addArray ([]
296 StringPairArray toAdd;
297 toAdd.set (
"ZZZ",
"ZZZ");
298 toAdd.set (
"ddd",
"ddd");
302 expect (withAddMap == withAddArray);
307static StringPairArrayTests stringPairArrayTests;
#define noexcept
Definition DistrhoDefines.h:72
int indexOf(StringRef stringToLookFor, bool ignoreCase=false, int startIndex=0) const
Definition juce_StringArray.cpp:194
Definition juce_String.h:53
void setIgnoresCase(bool shouldIgnoreCase)
Definition juce_StringPairArray.cpp:139
String getValue(StringRef, const String &defaultReturnValue) const
Definition juce_StringPairArray.cpp:86
bool ignoreCase
Definition juce_StringPairArray.h:159
bool containsKey(StringRef key) const noexcept
Definition juce_StringPairArray.cpp:96
void set(const String &key, const String &value)
Definition juce_StringPairArray.cpp:101
void clear()
Definition juce_StringPairArray.cpp:122
StringArray keys
Definition juce_StringPairArray.h:158
void addMapImpl(const Map &mapToAdd)
Definition juce_StringPairArray.cpp:171
String getDescription() const
Definition juce_StringPairArray.cpp:149
void remove(StringRef key)
Definition juce_StringPairArray.cpp:128
StringPairArray(bool ignoreCaseWhenComparingKeys=true)
Definition juce_StringPairArray.cpp:26
bool getIgnoresCase() const noexcept
Definition juce_StringPairArray.cpp:144
void minimiseStorageOverheads()
Definition juce_StringPairArray.cpp:164
void addMap(const std::map< String, String > &mapToAdd)
Definition juce_StringPairArray.cpp:206
void addArray(const StringPairArray &other)
Definition juce_StringPairArray.cpp:116
void addUnorderedMap(const std::unordered_map< String, String > &mapToAdd)
Definition juce_StringPairArray.cpp:205
int size() const noexcept
Definition juce_StringPairArray.h:93
const StringArray & getAllKeys() const noexcept
Definition juce_StringPairArray.h:87
StringArray values
Definition juce_StringPairArray.h:158
Definition juce_StringRef.h:62
register unsigned j
Definition inflate.c:1576
register unsigned i
Definition inflate.c:1575
unsigned s
Definition inflate.c:1555
static PuglViewHint int value
Definition pugl.h:1708
Definition carla_juce.cpp:31
const char * text
Definition swell-functions.h:167
ZCONST char * key
Definition crypt.c:587
#define const
Definition zconf.h:137