From fe781ab6591ad46b6ebb7ce425fc225c49461e70 Mon Sep 17 00:00:00 2001
From: eb <eb@221aa14e-8319-0410-a670-987f0aec2ac5>
Date: Wed, 15 Jul 2009 01:28:39 +0000
Subject: pmt perf improvements: Make function arguments const & (c1257, c1260
 from Stefan BrĂ¼ns)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

git-svn-id: http://gnuradio.org/svn/gnuradio/trunk@11439 221aa14e-8319-0410-a670-987f0aec2ac5
---
 pmt/src/lib/pmt.cc    | 53 +++++++++++++++++++++++++++------------------------
 pmt/src/lib/pmt.h     | 38 ++++++++++++++++++------------------
 pmt/src/lib/pmt_int.h |  2 +-
 3 files changed, 48 insertions(+), 45 deletions(-)

(limited to 'pmt/src')

diff --git a/pmt/src/lib/pmt.cc b/pmt/src/lib/pmt.cc
index aba0604740..b403c23279 100644
--- a/pmt/src/lib/pmt.cc
+++ b/pmt/src/lib/pmt.cc
@@ -219,7 +219,7 @@ hash_string(const std::string &s)
 }
 
 bool 
-pmt_is_symbol(pmt_t obj)
+pmt_is_symbol(const pmt_t& obj)
 {
   return obj->is_symbol();
 }
@@ -250,7 +250,7 @@ pmt_intern(const std::string &name)
 }
 
 const std::string
-pmt_symbol_to_string(pmt_t sym)
+pmt_symbol_to_string(const pmt_t& sym)
 {
   if (!sym->is_symbol())
     throw pmt_wrong_type("pmt_symbol_to_string", sym);
@@ -364,28 +364,28 @@ pmt_to_complex(pmt_t x)
 ////////////////////////////////////////////////////////////////////////////
 
 pmt_null::pmt_null() {}
-pmt_pair::pmt_pair(pmt_t car, pmt_t cdr) : d_car(car), d_cdr(cdr) {}
+pmt_pair::pmt_pair(const pmt_t& car, const pmt_t& cdr) : d_car(car), d_cdr(cdr) {}
 
 bool
-pmt_is_null(pmt_t x)
+pmt_is_null(const pmt_t& x)
 {
   return x == PMT_NIL;
 }
 
 bool
-pmt_is_pair(pmt_t obj)
+pmt_is_pair(const pmt_t& obj)
 {
   return obj->is_pair();
 }
 
 pmt_t
-pmt_cons(pmt_t x, pmt_t y)
+pmt_cons(const pmt_t& x, const pmt_t& y)
 {
   return pmt_t(new pmt_pair(x, y));
 }
 
 pmt_t
-pmt_car(pmt_t pair)
+pmt_car(const pmt_t& pair)
 {
   pmt_pair* p = dynamic_cast<pmt_pair*>(pair.get());
   if ( p )
@@ -395,7 +395,7 @@ pmt_car(pmt_t pair)
 }
 
 pmt_t
-pmt_cdr(pmt_t pair)
+pmt_cdr(const pmt_t& pair)
 {
   pmt_pair* p = dynamic_cast<pmt_pair*>(pair.get());
   if ( p )
@@ -681,13 +681,13 @@ pmt_any_set(pmt_t obj, const boost::any &any)
 ////////////////////////////////////////////////////////////////////////////
 
 bool
-pmt_eq(pmt_t x, pmt_t y)
+pmt_eq(const pmt_t& x, const pmt_t& y)
 {
   return x == y;
 }
 
 bool
-pmt_eqv(pmt_t x, pmt_t y)
+pmt_eqv(const pmt_t& x, const pmt_t& y)
 {
   if (x == y)
     return true;
@@ -705,7 +705,7 @@ pmt_eqv(pmt_t x, pmt_t y)
 }
 
 bool
-pmt_equal(pmt_t x, pmt_t y)
+pmt_equal(const pmt_t& x, const pmt_t& y)
 {
   if (pmt_eqv(x, y))
     return true;
@@ -747,7 +747,7 @@ pmt_equal(pmt_t x, pmt_t y)
 }
 
 size_t
-pmt_length(pmt_t x)
+pmt_length(const pmt_t& x)
 {
   if (x->is_vector())
     return _vector(x)->length();
@@ -755,13 +755,16 @@ pmt_length(pmt_t x)
   if (x->is_uniform_vector())
     return _uniform_vector(x)->length();
 
-  if (x->is_pair() || x->is_null()) {
-    size_t length=0;
-    while (pmt_is_pair(x)){
+  if (x->is_null()) return 0;
+
+  if (x->is_pair()) {
+    size_t length=1;
+	pmt_t it = pmt_cdr(x);
+    while (pmt_is_pair(it)){
       length++;
-      x = pmt_cdr(x);
+      it = pmt_cdr(it);
     }
-    if (pmt_is_null(x))
+    if (pmt_is_null(it))
       return length;
 
     // not a proper list
@@ -822,7 +825,7 @@ pmt_assoc(pmt_t obj, pmt_t alist)
 }
 
 pmt_t
-pmt_map(pmt_t proc(pmt_t), pmt_t list)
+pmt_map(pmt_t proc(const pmt_t&), pmt_t list)
 {
   pmt_t r = PMT_NIL;
 
@@ -933,43 +936,43 @@ pmt_subsetp(pmt_t list1, pmt_t list2)
 }
 
 pmt_t
-pmt_list1(pmt_t x1)
+pmt_list1(const pmt_t& x1)
 {
   return pmt_cons(x1, PMT_NIL);
 }
 
 pmt_t
-pmt_list2(pmt_t x1, pmt_t x2)
+pmt_list2(const pmt_t& x1, const pmt_t& x2)
 {
   return pmt_cons(x1, pmt_cons(x2, PMT_NIL));
 }
 
 pmt_t
-pmt_list3(pmt_t x1, pmt_t x2, pmt_t x3)
+pmt_list3(const pmt_t& x1, const pmt_t& x2, const pmt_t& x3)
 {
   return pmt_cons(x1, pmt_cons(x2, pmt_cons(x3, PMT_NIL)));
 }
 
 pmt_t
-pmt_list4(pmt_t x1, pmt_t x2, pmt_t x3, pmt_t x4)
+pmt_list4(const pmt_t& x1, const pmt_t& x2, const pmt_t& x3, const pmt_t& x4)
 {
   return pmt_cons(x1, pmt_cons(x2, pmt_cons(x3, pmt_cons(x4, PMT_NIL))));
 }
 
 pmt_t
-pmt_list5(pmt_t x1, pmt_t x2, pmt_t x3, pmt_t x4, pmt_t x5)
+pmt_list5(const pmt_t& x1, const pmt_t& x2, const pmt_t& x3, const pmt_t& x4, const pmt_t& x5)
 {
   return pmt_cons(x1, pmt_cons(x2, pmt_cons(x3, pmt_cons(x4, pmt_cons(x5, PMT_NIL)))));
 }
 
 pmt_t
-pmt_list6(pmt_t x1, pmt_t x2, pmt_t x3, pmt_t x4, pmt_t x5, pmt_t x6)
+pmt_list6(const pmt_t& x1, const pmt_t& x2, const pmt_t& x3, const pmt_t& x4, const pmt_t& x5, const pmt_t& x6)
 {
   return pmt_cons(x1, pmt_cons(x2, pmt_cons(x3, pmt_cons(x4, pmt_cons(x5, pmt_cons(x6, PMT_NIL))))));
 }
 
 pmt_t
-pmt_list_add(pmt_t list, pmt_t item)
+pmt_list_add(pmt_t list, const pmt_t& item)
 {
   return pmt_reverse(pmt_cons(item, pmt_reverse(list)));
 }
diff --git a/pmt/src/lib/pmt.h b/pmt/src/lib/pmt.h
index a69d24a05b..24963fee71 100644
--- a/pmt/src/lib/pmt.h
+++ b/pmt/src/lib/pmt.h
@@ -109,7 +109,7 @@ bool pmt_to_bool(pmt_t val);
  */
 
 //! Return true if obj is a symbol, else false.
-bool pmt_is_symbol(pmt_t obj);
+bool pmt_is_symbol(const pmt_t& obj);
 
 //! Return the symbol whose name is \p s.
 pmt_t pmt_string_to_symbol(const std::string &s);
@@ -122,7 +122,7 @@ pmt_t pmt_intern(const std::string &s);
  * If \p is a symbol, return the name of the symbol as a string.
  * Otherwise, raise the wrong_type exception.
  */
-const std::string pmt_symbol_to_string(pmt_t sym);
+const std::string pmt_symbol_to_string(const pmt_t& sym);
 
 /*
  * ------------------------------------------------------------------------
@@ -206,19 +206,19 @@ std::complex<double> pmt_to_complex(pmt_t z);
 extern const pmt_t PMT_NIL;	//< the empty list
 
 //! Return true if \p x is the empty list, otherwise return false.
-bool pmt_is_null(pmt_t x);
+bool pmt_is_null(const pmt_t& x);
 
 //! Return true if \p obj is a pair, else false.
-bool pmt_is_pair(pmt_t obj);
+bool pmt_is_pair(const pmt_t& obj);
 
 //! Return a newly allocated pair whose car is \p x and whose cdr is \p y.
-pmt_t pmt_cons(pmt_t x, pmt_t y);
+pmt_t pmt_cons(const pmt_t& x, const pmt_t& y);
 
 //! If \p pair is a pair, return the car of the \p pair, otherwise raise wrong_type.
-pmt_t pmt_car(pmt_t pair);
+pmt_t pmt_car(const pmt_t& pair);
 
 //! If \p pair is a pair, return the cdr of the \p pair, otherwise raise wrong_type.
-pmt_t pmt_cdr(pmt_t pair);
+pmt_t pmt_cdr(const pmt_t& pair);
 
 //! Stores \p value in the car field of \p pair.
 void pmt_set_car(pmt_t pair, pmt_t value);
@@ -449,7 +449,7 @@ void pmt_any_set(pmt_t obj, const boost::any &any);
  */
 
 //! Return true if x and y are the same object; otherwise return false.
-bool pmt_eq(pmt_t x, pmt_t y);
+bool pmt_eq(const pmt_t& x, const pmt_t& y);
 
 /*!
  * \brief Return true if x and y should normally be regarded as the same object, else false.
@@ -464,7 +464,7 @@ bool pmt_eq(pmt_t x, pmt_t y);
  *   x and y are pairs or vectors that denote same location in store.
  * </pre>
  */
-bool pmt_eqv(pmt_t x, pmt_t y);
+bool pmt_eqv(const pmt_t& x, const pmt_t& y);
 
 /*!
  * pmt_equal recursively compares the contents of pairs and vectors,
@@ -472,11 +472,11 @@ bool pmt_eqv(pmt_t x, pmt_t y);
  * pmt_equal may fail to terminate if its arguments are circular data
  * structures.
  */
-bool pmt_equal(pmt_t x, pmt_t y);
+bool pmt_equal(const pmt_t& x, const pmt_t& y);
 
 
 //! Return the number of elements in v
-size_t pmt_length(pmt_t v);
+size_t pmt_length(const pmt_t& v);
 
 /*!
  * \brief Find the first pair in \p alist whose car field is \p obj
@@ -515,7 +515,7 @@ pmt_t pmt_assoc(pmt_t obj, pmt_t alist);
  * \p list must be a list.  The dynamic order in which \p proc is
  * applied to the elements of \p list is unspecified.
  */
-pmt_t pmt_map(pmt_t proc(pmt_t), pmt_t list);
+pmt_t pmt_map(pmt_t proc(const pmt_t&), pmt_t list);
 
 /*!
  * \brief reverse \p list.
@@ -581,38 +581,38 @@ bool pmt_subsetp(pmt_t list1, pmt_t list2);
 /*!
  * \brief Return a list of length 1 containing \p x1
  */
-pmt_t pmt_list1(pmt_t x1);
+pmt_t pmt_list1(const pmt_t& x1);
 
 /*!
  * \brief Return a list of length 2 containing \p x1, \p x2
  */
-pmt_t pmt_list2(pmt_t x1, pmt_t x2);
+pmt_t pmt_list2(const pmt_t& x1, const pmt_t& x2);
 
 /*!
  * \brief Return a list of length 3 containing \p x1, \p x2, \p x3
  */
-pmt_t pmt_list3(pmt_t x1, pmt_t x2, pmt_t x3);
+pmt_t pmt_list3(const pmt_t& x1, const pmt_t& x2, const pmt_t& x3);
 
 /*!
  * \brief Return a list of length 4 containing \p x1, \p x2, \p x3, \p x4
  */
-pmt_t pmt_list4(pmt_t x1, pmt_t x2, pmt_t x3, pmt_t x4);
+pmt_t pmt_list4(const pmt_t& x1, const pmt_t& x2, const pmt_t& x3, const pmt_t& x4);
 
 /*!
  * \brief Return a list of length 5 containing \p x1, \p x2, \p x3, \p x4, \p x5
  */
-pmt_t pmt_list5(pmt_t x1, pmt_t x2, pmt_t x3, pmt_t x4, pmt_t x5);
+pmt_t pmt_list5(const pmt_t& x1, const pmt_t& x2, const pmt_t& x3, const pmt_t& x4, const pmt_t& x5);
 
 /*!
  * \brief Return a list of length 6 containing \p x1, \p x2, \p x3, \p x4, \p
  * x5, \p x6
  */
-pmt_t pmt_list6(pmt_t x1, pmt_t x2, pmt_t x3, pmt_t x4, pmt_t x5, pmt_t x6);
+pmt_t pmt_list6(const pmt_t& x1, const pmt_t& x2, const pmt_t& x3, const pmt_t& x4, const pmt_t& x5, const pmt_t& x6);
 
 /*!
  * \brief Return \p list with \p item added to it.
  */
-pmt_t pmt_list_add(pmt_t list, pmt_t item);
+pmt_t pmt_list_add(pmt_t list, const pmt_t& item);
 
 
 /*
diff --git a/pmt/src/lib/pmt_int.h b/pmt/src/lib/pmt_int.h
index 285244cb5f..a973d30d9e 100644
--- a/pmt/src/lib/pmt_int.h
+++ b/pmt/src/lib/pmt_int.h
@@ -151,7 +151,7 @@ class pmt_pair : public pmt_base
   pmt_t		d_cdr;
 
 public:
-  pmt_pair(pmt_t car, pmt_t cdr);
+  pmt_pair(const pmt_t& car, const pmt_t& cdr);
   //~pmt_pair(){};
 
   bool is_pair() const { return true; }
-- 
cgit v1.2.3