Dynamic::Struct construction from std::map

This commit is contained in:
Aleksandar Fabijanic 2008-12-23 16:08:28 +00:00
parent 8a2502bce4
commit 8311cd078a
2 changed files with 52 additions and 4 deletions

View File

@ -74,6 +74,14 @@ public:
{
}
template <typename T>
Struct(const std::map<K, T>& val)
{
std::map<K, T>::const_iterator it = val.begin();
std::map<K, T>::const_iterator end = val.end();
for (; it != end; ++it) _data.insert(ValueType(it->first, Var(it->second)));
}
virtual ~Struct()
/// Destroys the Struct.
{

View File

@ -1761,7 +1761,8 @@ void VarTest::testIsStruct()
long s14(232323);
unsigned long s15(21233232);
std::vector<Var> s16;
DynamicStruct s17;
Struct<std::string> s17;
Struct<int> s18;
Var d1(s1);
Var d2(s2);
@ -1780,6 +1781,7 @@ void VarTest::testIsStruct()
Var d15(s15);
Var d16(s16);
Var d17(s17);
Var d18(s18);
assert (!d1.isStruct());
assert (!d2.isStruct());
@ -1798,6 +1800,7 @@ void VarTest::testIsStruct()
assert (!d15.isStruct());
assert (!d16.isStruct());
assert (d17.isStruct());
assert (d18.isStruct());
}
@ -1951,12 +1954,29 @@ void VarTest::testDynamicStructString()
a1["First Name"] = "Senior";
assert (a1["First Name"] == "Senior");
testGetIdxMustThrow(a1, 0);
Struct<std::string> s1;
s1["1"] = 1;
s1["2"] = 2;
s1["3"] = 3;
Struct<std::string> s2(s1);
assert (s2["1"] == 1);
assert (s2["2"] == 2);
assert (s2["3"] == 3);
std::map<std::string, int> m1;
m1["1"] = 1;
m1["2"] = 2;
m1["3"] = 3;
Struct<std::string> m2(m1);
assert (m2["1"] == 1);
assert (m2["2"] == 2);
assert (m2["3"] == 3);
}
void VarTest::testDynamicStructInt()
{
Dynamic::Struct<int> aStruct;
@ -1967,6 +1987,26 @@ void VarTest::testDynamicStructInt()
assert (a1[1] == "POCO");
a1[0] = "Senior";
assert (a1[0] == "Senior");
Struct<int> s1;
s1[1] = "1";
s1[2] = "2";
s1[3] = "3";
Struct<int> s2(s1);
assert (s2[1] == "1");
assert (s2[2] == "2");
assert (s2[3] == "3");
std::map<int, std::string> m1;
m1[1] = "1";
m1[2] = "2";
m1[3] = "3";
Struct<int> m2(m1);
assert (m2[1] == "1");
assert (m2[2] == "2");
assert (m2[3] == "3");
}