From 008076766d7609ee8e4326fe0d1d57f9fb1ce6a7 Mon Sep 17 00:00:00 2001
From: Ger van Diepen <diepen@astron.nl>
Date: Tue, 28 Feb 2012 07:44:25 +0000
Subject: [PATCH] Task #3116 Added and tested ParameterSet functions getVector
 and getRecord

---
 LCS/Common/include/Common/ParameterSet.h | 13 +++++++++++++
 LCS/Common/src/ParameterSet.cc           | 21 ++++++++++++++-------
 LCS/Common/test/tParameterRecord.cc      |  6 ++++++
 LCS/Common/test/tParameterSet.cc         |  1 +
 4 files changed, 34 insertions(+), 7 deletions(-)

diff --git a/LCS/Common/include/Common/ParameterSet.h b/LCS/Common/include/Common/ParameterSet.h
index 807320ccfbb..24bedbfbcb6 100644
--- a/LCS/Common/include/Common/ParameterSet.h
+++ b/LCS/Common/include/Common/ParameterSet.h
@@ -217,6 +217,14 @@ public:
 	// e.g: a.b.c.d.param=xxxx --> fullModuleName(b.c)-->a.b.c
 	string	fullModuleName(const string&	shortName) const;
 
+	// Return the value of the key as a vector of values.
+        // This can only be done if the value is enclosed in square brackets.
+        vector<ParameterValue> getVector (const string& aKey) const;
+
+	// Return the value of the key as a parameter record.
+        // This can only be done if the value is enclosed in curly braces.
+        ParameterRecord getRecord (const string& aKey) const;
+
 	// Return scalar value.
 	// @{
 	bool	getBool  (const string& aKey) const;
@@ -484,6 +492,11 @@ inline string	ParameterSet::fullModuleName(const string&	shortName) const
 	return (itsSet->fullModuleName(shortName));
 }
 
+inline vector<ParameterValue> ParameterSet::getVector (const string& aKey) const
+{
+        return get(aKey).getVector();
+}
+
 //#	getBool(key)
 inline bool ParameterSet::getBool(const string& aKey) const
 {
diff --git a/LCS/Common/src/ParameterSet.cc b/LCS/Common/src/ParameterSet.cc
index 9af35b5936f..23378b640d5 100644
--- a/LCS/Common/src/ParameterSet.cc
+++ b/LCS/Common/src/ParameterSet.cc
@@ -25,6 +25,7 @@
 
 
 #include <Common/ParameterSet.h>
+#include <Common/ParameterRecord.h>
 #include <Common/LofarLogger.h>
 #include <Common/lofar_fstream.h>
 
@@ -87,11 +88,11 @@ ParameterSet::ParameterSet(const ParameterSet& that)
 ParameterSet& 
 ParameterSet::operator=(const ParameterSet& that)
 {
-	if (this != &that) {
-	  unlink();
-	  itsSet = that.itsSet->incrCount();
-	}
-	return (*this);
+  if (this != &that) {
+    unlink();
+    itsSet = that.itsSet->incrCount();
+  }
+  return (*this);
 }
 
 //
@@ -109,13 +110,19 @@ void ParameterSet::unlink()
   }
 }
 
+
+ParameterRecord ParameterSet::getRecord (const string& aKey) const
+{
+  return get(aKey).getRecord();
+}
+
 //
 // operator<<
 //
 std::ostream&	operator<< (std::ostream& os, const ParameterSet &thePS)
 {
-	os << *thePS.itsSet;
-	return os;
+  os << *thePS.itsSet;
+  return os;
 }
 
 } // namespace LOFAR
diff --git a/LCS/Common/test/tParameterRecord.cc b/LCS/Common/test/tParameterRecord.cc
index 2631ee0df4f..6e1384301dc 100644
--- a/LCS/Common/test/tParameterRecord.cc
+++ b/LCS/Common/test/tParameterRecord.cc
@@ -66,6 +66,12 @@ void testNested()
   ASSERT (rec.getString("k2b") == "3");
   ParameterValue pvkey (rec.get("key"));
   ASSERT (pvkey.isRecord());
+  {
+    // Test ParameterSet::getRecord
+    ParameterRecord prkey (rec.getRecord("key"));
+    ASSERT (prkey.size() == 1);
+    ASSERT (prkey.isDefined("k1"));
+  }
   ParameterRecord prkey (pvkey.getRecord());
   ParameterValue pvk1 (prkey.get("k1"));
   ASSERT (pvk1.isRecord());
diff --git a/LCS/Common/test/tParameterSet.cc b/LCS/Common/test/tParameterSet.cc
index 0c8010e10a1..d473531adab 100644
--- a/LCS/Common/test/tParameterSet.cc
+++ b/LCS/Common/test/tParameterSet.cc
@@ -102,6 +102,7 @@ int doIt(KeyCompare::Mode mode)
     ASSERT(myPS.getTime("Time", 15) == 15);
     ASSERT(myPS.getTime("Time", 18000) == 18000);
     ASSERT(myPS["emptyvec"].getVector().size() == 0);
+    ASSERT(myPS.getVector("emptyvec").size() == 0);
     ASSERT(myPS.getUint32Vector("emptyvec").size() == 0);
 
     {
-- 
GitLab