commit-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Commit-gnuradio] [gnuradio] 01/02: digital:move GLFSR from 'int' to 'u


From: git
Subject: [Commit-gnuradio] [gnuradio] 01/02: digital:move GLFSR from 'int' to 'uint32'. Add SWIG interface
Date: Tue, 16 Aug 2016 16:30:45 +0000 (UTC)

This is an automated email from the git hooks/post-receive script.

jcorgan pushed a commit to branch next
in repository gnuradio.

commit 9f8e36509959788c5333fc935a66a1311f05a4d5
Author: Marcus Müller <address@hidden>
Date:   Tue Aug 9 22:50:21 2016 +0200

    digital:move GLFSR from 'int' to 'uint32'. Add SWIG interface
---
 gr-digital/include/gnuradio/digital/glfsr.h        | 22 +++++--------
 .../include/gnuradio/digital/glfsr_source_b.h      | 10 +++---
 .../include/gnuradio/digital/glfsr_source_f.h      | 10 +++---
 gr-digital/lib/glfsr.cc                            | 19 ++++++++---
 gr-digital/lib/glfsr_source_b_impl.cc              | 38 +++++++++++-----------
 gr-digital/lib/glfsr_source_b_impl.h               | 14 ++++----
 gr-digital/lib/glfsr_source_f_impl.cc              | 38 +++++++++++-----------
 gr-digital/lib/glfsr_source_f_impl.h               | 18 +++++-----
 gr-digital/swig/digital_swig.i                     |  2 ++
 9 files changed, 88 insertions(+), 83 deletions(-)

diff --git a/gr-digital/include/gnuradio/digital/glfsr.h 
b/gr-digital/include/gnuradio/digital/glfsr.h
index 4459049..449eeaa 100644
--- a/gr-digital/include/gnuradio/digital/glfsr.h
+++ b/gr-digital/include/gnuradio/digital/glfsr.h
@@ -1,6 +1,6 @@
 /* -*- c++ -*- */
 /*
- * Copyright 2007,2012 Free Software Foundation, Inc.
+ * Copyright 2007,2012,2016 Free Software Foundation, Inc.
  *
  * This file is part of GNU Radio
  *
@@ -24,6 +24,7 @@
 #define INCLUDED_DIGITAL_GLFSR_H
 
 #include <gnuradio/digital/api.h>
+#include <boost/cstdint.hpp>
 
 namespace gr {
   namespace digital {
@@ -38,25 +39,18 @@ namespace gr {
     class DIGITAL_API glfsr
     {
     private:
-      int d_shift_register;
-      int d_mask;
+      uint32_t d_shift_register;
+      uint32_t d_mask;
 
     public:
-      glfsr(int mask, int seed) { d_shift_register = seed; d_mask = mask; }
+      glfsr(uint32_t mask, uint32_t seed) { d_shift_register = seed; d_mask = 
mask; }
       ~glfsr();
 
-      static int glfsr_mask(int degree);
+      static uint32_t glfsr_mask(unsigned int degree);
 
-      unsigned char next_bit()
-      {
-       unsigned char bit = d_shift_register & 1;
-       d_shift_register >>= 1;
-       if(bit)
-         d_shift_register ^= d_mask;
-       return bit;
-      }
+      uint8_t next_bit();
 
-      int mask() const { return d_mask; }
+      uint32_t mask() const { return d_mask; }
     };
 
   } /* namespace digital */
diff --git a/gr-digital/include/gnuradio/digital/glfsr_source_b.h 
b/gr-digital/include/gnuradio/digital/glfsr_source_b.h
index 3491d73..46ea38e 100644
--- a/gr-digital/include/gnuradio/digital/glfsr_source_b.h
+++ b/gr-digital/include/gnuradio/digital/glfsr_source_b.h
@@ -1,6 +1,6 @@
 /* -*- c++ -*- */
 /*
- * Copyright 2007,2012 Free Software Foundation, Inc.
+ * Copyright 2007,2012,2016 Free Software Foundation, Inc.
  *
  * This file is part of GNU Radio
  *
@@ -50,11 +50,11 @@ namespace gr {
        *               register to feed back.
        * \param seed   Initial setting for values in shift register.
        */
-      static sptr make(int degree, bool repeat=true,
-                      int mask=0, int seed=1);
+      static sptr make(unsigned int degree, bool repeat=true,
+                      uint32_t mask=0x0, uint32_t seed=0x1);
        
-      virtual unsigned int period() const = 0;
-      virtual int mask() const = 0;
+      virtual uint32_t period() const = 0;
+      virtual uint32_t mask() const = 0;
     };
 
   } /* namespace digital */
diff --git a/gr-digital/include/gnuradio/digital/glfsr_source_f.h 
b/gr-digital/include/gnuradio/digital/glfsr_source_f.h
index 24c0713..b86f83c 100644
--- a/gr-digital/include/gnuradio/digital/glfsr_source_f.h
+++ b/gr-digital/include/gnuradio/digital/glfsr_source_f.h
@@ -1,6 +1,6 @@
 /* -*- c++ -*- */
 /*
- * Copyright 2007,2012 Free Software Foundation, Inc.
+ * Copyright 2007,2012,2016 Free Software Foundation, Inc.
  *
  * This file is part of GNU Radio
  *
@@ -50,11 +50,11 @@ namespace gr {
        *               register to feed back.
        * \param seed   Initial setting for values in shift register.
        */
-      static sptr make(int degree, bool repeat=true,
-                      int mask=0, int seed=1);
+      static sptr make(unsigned int degree, bool repeat=true,
+                      uint32_t mask=0, uint32_t seed=1);
 
-      virtual unsigned int period() const = 0;
-      virtual int mask() const = 0;
+      virtual uint32_t period() const = 0;
+      virtual uint32_t mask() const = 0;
     };
 
   } /* namespace digital */
diff --git a/gr-digital/lib/glfsr.cc b/gr-digital/lib/glfsr.cc
index fa6c765..5593bf8 100644
--- a/gr-digital/lib/glfsr.cc
+++ b/gr-digital/lib/glfsr.cc
@@ -1,6 +1,6 @@
 /* -*- c++ -*- */
 /*
- * Copyright 2007,2012 Free Software Foundation, Inc.
+ * Copyright 2007,2012,2016 Free Software Foundation, Inc.
  *
  * This file is part of GNU Radio
  *
@@ -26,7 +26,7 @@
 namespace gr {
   namespace digital {
 
-    static int s_polynomial_masks[] = {
+    static uint32_t s_polynomial_masks[] = {
       0x00000000,
       0x00000001,              // x^1 + 1
       0x00000003,               // x^2 + x^1 + 1
@@ -59,19 +59,28 @@ namespace gr {
       0x10000002,              // x^29 + x^2 + 1
       0x20000029,              // x^30 + x^4 + x^1 + 1
       0x40000004,              // x^31 + x^3 + 1
-      (int) 0x80000057         // x^32 + x^7 + x^5 + x^3 + x^2 + x^1 + 1
+      0x80000057               // x^32 + x^7 + x^5 + x^3 + x^2 + x^1 + 1
     };
 
     glfsr::~glfsr()
     {
     }
 
-    int glfsr::glfsr_mask(int degree)
+    uint32_t glfsr::glfsr_mask(unsigned int degree)
     {
       if(degree < 1 || degree > 32)
-       throw std::runtime_error("glfsr::glfsr_mask(): degree must be between 1 
and 32 inclusive");
+        throw std::runtime_error("glfsr::glfsr_mask(): degree must be between 
1 and 32 inclusive");
       return s_polynomial_masks[degree];
     }
 
+    uint8_t glfsr::next_bit()
+    {
+      unsigned char bit = d_shift_register & 0x1;
+      d_shift_register >>= 1;
+      if(bit)
+        d_shift_register ^= d_mask;
+      return bit;
+    }
+
   } /* namespace digital */
 } /* namespace gr */
diff --git a/gr-digital/lib/glfsr_source_b_impl.cc 
b/gr-digital/lib/glfsr_source_b_impl.cc
index 260bd45..6b1a149 100644
--- a/gr-digital/lib/glfsr_source_b_impl.cc
+++ b/gr-digital/lib/glfsr_source_b_impl.cc
@@ -1,6 +1,6 @@
 /* -*- c++ -*- */
 /*
- * Copyright 2007,2010,2012 Free Software Foundation, Inc.
+ * Copyright 2007,2010,2012,2016 Free Software Foundation, Inc.
  *
  * This file is part of GNU Radio
  *
@@ -32,25 +32,25 @@ namespace gr {
   namespace digital {
 
     glfsr_source_b::sptr
-    glfsr_source_b::make(int degree, bool repeat, int mask, int seed)
+    glfsr_source_b::make(unsigned int degree, bool repeat, uint32_t mask, 
uint32_t seed)
     {
       return gnuradio::get_initial_sptr
-       (new glfsr_source_b_impl(degree, repeat, mask, seed));
+        (new glfsr_source_b_impl(degree, repeat, mask, seed));
     }
 
-    glfsr_source_b_impl::glfsr_source_b_impl(int degree, bool repeat,
-                                            int mask, int seed)
+    glfsr_source_b_impl::glfsr_source_b_impl(unsigned int degree, bool repeat,
+                                             uint32_t mask, uint32_t seed)
       : sync_block("glfsr_source_b",
-                     io_signature::make(0, 0, 0),
-                     io_signature::make(1, 1, sizeof(unsigned char))),
-       d_repeat(repeat), d_index(0)
+                   io_signature::make(0, 0, 0),
+                   io_signature::make(1, 1, sizeof(unsigned char))),
+        d_repeat(repeat), d_index(0),
+        d_length( ( ((uint32_t)1) << degree) - 1)
     {
       if(degree < 1 || degree > 32)
-       throw std::runtime_error("glfsr_source_b_impl: degree must be between 1 
and 32 inclusive");
-      d_length = (unsigned int)((1ULL << degree)-1);
+        throw std::runtime_error("glfsr_source_b_impl: degree must be between 
1 and 32 inclusive");
 
       if(mask == 0)
-       mask = glfsr::glfsr_mask(degree);
+        mask = glfsr::glfsr_mask(degree);
       d_glfsr = new glfsr(mask, seed);
     }
 
@@ -59,7 +59,7 @@ namespace gr {
       delete d_glfsr;
     }
 
-    int
+    uint32_t
     glfsr_source_b_impl::mask() const
     {
       return d_glfsr->mask();
@@ -67,19 +67,19 @@ namespace gr {
 
     int
     glfsr_source_b_impl::work(int noutput_items,
-                             gr_vector_const_void_star &input_items,
-                             gr_vector_void_star &output_items)
+                              gr_vector_const_void_star &input_items,
+                              gr_vector_void_star &output_items)
     {
       char *out = (char*)output_items[0];
       if((d_index > d_length) && d_repeat == false)
-       return -1; /* once through the sequence */
+        return WORK_DONE; /* once through the sequence */
 
       int i;
       for(i = 0; i < noutput_items; i++) {
-       out[i] = d_glfsr->next_bit();
-       d_index++;
-       if(d_index > d_length && d_repeat == false)
-         break;
+        out[i] = d_glfsr->next_bit();
+        d_index++;
+        if(d_index > d_length && d_repeat == false)
+          break;
       }
 
       return i;
diff --git a/gr-digital/lib/glfsr_source_b_impl.h 
b/gr-digital/lib/glfsr_source_b_impl.h
index a063eb7..ff2b058 100644
--- a/gr-digital/lib/glfsr_source_b_impl.h
+++ b/gr-digital/lib/glfsr_source_b_impl.h
@@ -1,6 +1,6 @@
 /* -*- c++ -*- */
 /*
- * Copyright 2007,2012 Free Software Foundation, Inc.
+ * Copyright 2007,2012,2016 Free Software Foundation, Inc.
  *
  * This file is part of GNU Radio
  *
@@ -35,20 +35,20 @@ namespace gr {
       glfsr *d_glfsr;
 
       bool d_repeat;
-      unsigned int d_index;
-      unsigned int d_length;
+      uint32_t d_index;
+      uint32_t d_length;
 
     public:
-      glfsr_source_b_impl(int degree, bool repeat=true,
-                         int mask=0, int seed=1);
+      glfsr_source_b_impl(unsigned int degree, bool repeat=true,
+                         uint32_t mask=0, uint32_t seed=0x1);
       ~glfsr_source_b_impl();
 
       int work(int noutput_items,
               gr_vector_const_void_star &input_items,
               gr_vector_void_star &output_items);
 
-      unsigned int period() const { return d_length; }
-      int mask() const;
+      uint32_t period() const { return d_length; }
+      uint32_t mask() const;
     };
 
   } /* namespace digital */
diff --git a/gr-digital/lib/glfsr_source_f_impl.cc 
b/gr-digital/lib/glfsr_source_f_impl.cc
index cb637df..0dc24cb 100644
--- a/gr-digital/lib/glfsr_source_f_impl.cc
+++ b/gr-digital/lib/glfsr_source_f_impl.cc
@@ -1,6 +1,6 @@
 /* -*- c++ -*- */
 /*
- * Copyright 2007,2010,2012 Free Software Foundation, Inc.
+ * Copyright 2007,2010,2012,2016 Free Software Foundation, Inc.
  *
  * This file is part of GNU Radio
  *
@@ -33,25 +33,25 @@ namespace gr {
   namespace digital {
 
     glfsr_source_f::sptr
-    glfsr_source_f::make(int degree, bool repeat, int mask, int seed)
+    glfsr_source_f::make(unsigned int degree, bool repeat, uint32_t mask, 
uint32_t seed)
     {
       return gnuradio::get_initial_sptr
-       (new glfsr_source_f_impl(degree, repeat, mask, seed));
+        (new glfsr_source_f_impl(degree, repeat, mask, seed));
     }
 
-    glfsr_source_f_impl::glfsr_source_f_impl(int degree, bool repeat,
-                                            int mask, int seed)
+    glfsr_source_f_impl::glfsr_source_f_impl(unsigned int degree, bool repeat,
+                                             uint32_t mask, uint32_t seed)
       : sync_block("glfsr_source_f",
-                     io_signature::make(0, 0, 0),
-                     io_signature::make(1, 1, sizeof(float))),
-       d_repeat(repeat), d_index(0)
+                   io_signature::make(0, 0, 0),
+                   io_signature::make(1, 1, sizeof(float))),
+        d_repeat(repeat), d_index(0),
+        d_length( ( ((uint32_t)1) << degree) - 1)
     {
       if(degree < 1 || degree > 32)
-       throw std::runtime_error("glfsr_source_f_impl: degree must be between 1 
and 32 inclusive");
-      d_length = (unsigned int)((1ULL << degree)-1);
+        throw std::runtime_error("glfsr_source_f_impl: degree must be between 
1 and 32 inclusive");
 
       if(mask == 0)
-       mask = glfsr::glfsr_mask(degree);
+        mask = glfsr::glfsr_mask(degree);
       d_glfsr = new glfsr(mask, seed);
     }
 
@@ -60,7 +60,7 @@ namespace gr {
       delete d_glfsr;
     }
 
-    int
+    uint32_t
     glfsr_source_f_impl::mask() const
     {
       return d_glfsr->mask();
@@ -68,19 +68,19 @@ namespace gr {
 
     int
     glfsr_source_f_impl::work(int noutput_items,
-                             gr_vector_const_void_star &input_items,
-                             gr_vector_void_star &output_items)
+                              gr_vector_const_void_star &input_items,
+                              gr_vector_void_star &output_items)
     {
       float *out = (float *) output_items[0];
       if((d_index > d_length) && d_repeat == false)
-       return -1; /* once through the sequence */
+        return WORK_DONE; /* once through the sequence */
 
       int i;
       for(i = 0; i < noutput_items; i++) {
-       out[i] = (float)d_glfsr->next_bit()*2.0-1.0;
-       d_index++;
-       if(d_index > d_length && d_repeat == false)
-         break;
+        out[i] = (float)d_glfsr->next_bit()*2.0-1.0;
+        d_index++;
+        if(d_index > d_length && d_repeat == false)
+          break;
       }
 
       return i;
diff --git a/gr-digital/lib/glfsr_source_f_impl.h 
b/gr-digital/lib/glfsr_source_f_impl.h
index 194e2ff..b6ea966 100644
--- a/gr-digital/lib/glfsr_source_f_impl.h
+++ b/gr-digital/lib/glfsr_source_f_impl.h
@@ -1,6 +1,6 @@
 /* -*- c++ -*- */
 /*
- * Copyright 2007,2012 Free Software Foundation, Inc.
+ * Copyright 2007,2012,2016 Free Software Foundation, Inc.
  *
  * This file is part of GNU Radio
  *
@@ -35,20 +35,20 @@ namespace gr {
       glfsr *d_glfsr;
 
       bool d_repeat;
-      unsigned int d_index;
-      unsigned int d_length;
+      uint32_t d_index;
+      uint32_t d_length;
 
     public:
-      glfsr_source_f_impl(int degree, bool repeat=true,
-                        int mask=0, int seed=1);
+      glfsr_source_f_impl(unsigned int degree, bool repeat=true,
+                          uint32_t mask=0, uint32_t seed=0x1);
       ~glfsr_source_f_impl();
 
       int work(int noutput_items,
-              gr_vector_const_void_star &input_items,
-              gr_vector_void_star &output_items);
+               gr_vector_const_void_star &input_items,
+               gr_vector_void_star &output_items);
 
-      unsigned int period() const { return d_length; }
-      int mask() const;
+      uint32_t period() const { return d_length; }
+      uint32_t mask() const;
     };
 
   } /* namespace digital */
diff --git a/gr-digital/swig/digital_swig.i b/gr-digital/swig/digital_swig.i
index 8a38d65..37e2ff8 100644
--- a/gr-digital/swig/digital_swig.i
+++ b/gr-digital/swig/digital_swig.i
@@ -37,6 +37,7 @@
 %include <gnuradio/blocks/control_loop.h>
 
 %{
+#include "gnuradio/digital/glfsr.h"
 #include "gnuradio/digital/additive_scrambler_bb.h"
 #include "gnuradio/digital/binary_slicer_fb.h"
 #include "gnuradio/digital/burst_shaper_cc.h"
@@ -126,6 +127,7 @@
 #include "gnuradio/digital/header_payload_demux.h"
 %}
 
+%include "gnuradio/digital/glfsr.h"
 %include "gnuradio/digital/additive_scrambler_bb.h"
 %include "gnuradio/digital/binary_slicer_fb.h"
 %include "gnuradio/digital/burst_shaper_cc.h"



reply via email to

[Prev in Thread] Current Thread [Next in Thread]