From b0121c2515a1c1d59fc6ec40066e49fc26af295d Mon Sep 17 00:00:00 2001
From: Ger van Diepen <diepen@astron.nl>
Date: Wed, 26 Jan 2011 08:15:35 +0000
Subject: [PATCH] bug 1627: Added function keys

---
 LCS/pyparameterset/src/__init__.py             |  4 ++++
 LCS/pyparameterset/src/pyparameterset.cc       | 13 +++++++++++++
 LCS/pyparameterset/test/tpyparameterset.py     |  1 +
 LCS/pyparameterset/test/tpyparameterset.stdout |  1 +
 4 files changed, 19 insertions(+)

diff --git a/LCS/pyparameterset/src/__init__.py b/LCS/pyparameterset/src/__init__.py
index 35dbeb9d100..51bac88f1db 100755
--- a/LCS/pyparameterset/src/__init__.py
+++ b/LCS/pyparameterset/src/__init__.py
@@ -76,6 +76,10 @@ class parameterset(PyParameterSet):
         """Get the parametervalue object of a parameter."""
         return self._get (key)
 
+    def keys(self):
+        """Get a sorted list of all parameter names."""
+        return self.keywords()
+
     def get(self, key):
         """Get the parametervalue object of a parameter."""
         return self._get (key)
diff --git a/LCS/pyparameterset/src/pyparameterset.cc b/LCS/pyparameterset/src/pyparameterset.cc
index 130f59b2e70..998dc9d8476 100644
--- a/LCS/pyparameterset/src/pyparameterset.cc
+++ b/LCS/pyparameterset/src/pyparameterset.cc
@@ -54,6 +54,18 @@ namespace LOFAR {
 
     PyParameterSet makeSubset (const string& baseKey, const string& prefix)
       { return ParameterSet::makeSubset (baseKey, prefix); }
+
+    // Return a sorted list of keywords.
+    vector<string> keywords() const
+    {
+      vector<string> result;
+      result.reserve (size());
+      for (ParameterSet::const_iterator iter=begin(); iter!=end(); ++iter) {
+        result.push_back (iter->first);
+      }
+      std::sort (result.begin(), result.end());
+      return result;
+    }
   };
 
   // Define function pointers for overloaded functions to be able to tell
@@ -161,6 +173,7 @@ namespace LOFAR {
             "Get the number of parameters.")
       .def ("__len__", &ParameterSet::size,
             "Get the number of parameters.")
+      .def ("keywords", &PyParameterSet::keywords)
       .def ("makeSubset", &PyParameterSet::makeSubset,
  	    (boost::python::arg("baseKey"),
              boost::python::arg("prefix")=""),
diff --git a/LCS/pyparameterset/test/tpyparameterset.py b/LCS/pyparameterset/test/tpyparameterset.py
index 3bc87771180..0ed5eace3a2 100644
--- a/LCS/pyparameterset/test/tpyparameterset.py
+++ b/LCS/pyparameterset/test/tpyparameterset.py
@@ -77,4 +77,5 @@ ps.add ("vecbool", "[true,false,true]")
 ps.add ("vec", "[1,2,3]")
 ps.add ("vecexp", "[1..3,5..10]")
 ps.add ("vecnest", "[[1..3,5*10],[5..10]]")
+print ps.keys()
 checkps (ps)
diff --git a/LCS/pyparameterset/test/tpyparameterset.stdout b/LCS/pyparameterset/test/tpyparameterset.stdout
index 9ae10260061..9cab053c842 100644
--- a/LCS/pyparameterset/test/tpyparameterset.stdout
+++ b/LCS/pyparameterset/test/tpyparameterset.stdout
@@ -38,6 +38,7 @@ True
 [1, 2, 3, 10, 10, 10, 10, 10]
 [5, 6, 7, 8, 9, 10]
 
+['a.b', 'a.b.bool', 'a.b.c', 'a.b.double', 'a.b.lange_naam', 'e.g', 'egg', 'vec', 'vecbool', 'vecexp', 'vecnest']
 False
 True
 7
-- 
GitLab