commit-gnuradio
[Top][All Lists]
Advanced

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

[Commit-gnuradio] r5606 - gnuradio/branches/features/ofdm/receiver/gnura


From: eb
Subject: [Commit-gnuradio] r5606 - gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general
Date: Sat, 2 Jun 2007 14:13:35 -0600 (MDT)

Author: eb
Date: 2007-06-02 14:13:34 -0600 (Sat, 02 Jun 2007)
New Revision: 5606

Modified:
   
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_skiphead.cc
   
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_skiphead.h
   
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_skiphead.i
Log:
fixed gr_skiphead, added QA code

Modified: 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_skiphead.cc
===================================================================
--- 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_skiphead.cc
       2007-06-02 16:13:08 UTC (rev 5605)
+++ 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_skiphead.cc
       2007-06-02 20:13:34 UTC (rev 5606)
@@ -1,6 +1,6 @@
 /* -*- c++ -*- */
 /*
- * Copyright 2005 Free Software Foundation, Inc.
+ * Copyright 2005,2007 Free Software Foundation, Inc.
  * 
  * This file is part of GNU Radio
  * 
@@ -26,45 +26,57 @@
 #include <gr_skiphead.h>
 #include <gr_io_signature.h>
 
-gr_skiphead::gr_skiphead (size_t sizeof_stream_item, int nitems)
-  : gr_sync_block ("skiphead",
-       gr_make_io_signature (1, 1, sizeof_stream_item),
-       gr_make_io_signature (1, 1, sizeof_stream_item)),
-    d_nitems (nitems), d_nskipped_items (0)
+gr_skiphead::gr_skiphead (size_t itemsize, size_t nitems_to_skip)
+  : gr_block ("skiphead",
+             gr_make_io_signature(1, 1, itemsize),
+             gr_make_io_signature(1, 1, itemsize)),
+    d_nitems_to_skip(nitems_to_skip), d_nitems(0)
 {
 }
 
-gr_block_sptr
-gr_make_skiphead (size_t sizeof_stream_item, int nitems)
+gr_skiphead_sptr
+gr_make_skiphead (size_t itemsize, size_t nitems_to_skip)
 {
-  return gr_block_sptr (new gr_skiphead (sizeof_stream_item, nitems));
+  return gr_skiphead_sptr (new gr_skiphead (itemsize, nitems_to_skip));
 }
 
 int
-gr_skiphead::work (int noutput_items,
-        gr_vector_const_void_star &input_items,
-        gr_vector_void_star &output_items)
+gr_skiphead::general_work(int noutput_items,
+                         gr_vector_int &ninput_items_ignored,
+                         gr_vector_const_void_star &input_items,
+                         gr_vector_void_star &output_items)
 {
-  int items_to_skip = d_nitems - d_nskipped_items;
-  if (items_to_skip <=0)
-  {
-     //Done with skipping, copy all input to the output;
-     memcpy (output_items[0], input_items[0], noutput_items * 
input_signature()->sizeof_stream_item (0));
-     return noutput_items;
-  } else if (items_to_skip < noutput_items)
-  {
-     memcpy (output_items[0], &(((char 
*)input_items[0])[items_to_skip*input_signature()->sizeof_stream_item (0)]), 
(noutput_items -items_to_skip) * input_signature()->sizeof_stream_item (0));
-    //memcpy (output_items[0], &((input_items[0])[items_to_skip]), 
(noutput_items -items_to_skip) * input_signature()->sizeof_stream_item (0));
-     //memcpy (output_items[0], 
input_items[0]+items_to_skip*input_signature()->sizeof_stream_item (0), 
(noutput_items -items_to_skip) * input_signature()->sizeof_stream_item (0));
-     d_nskipped_items += items_to_skip;
-     consume_each (items_to_skip);
-     return (noutput_items -items_to_skip);
-  } else
-  {
-     d_nskipped_items += noutput_items;
-     consume_each (items_to_skip);
-     return 0;
+  const char *in = (const char *) input_items[0];
+  char *out = (char *) output_items[0];
+
+  int ninput_items = noutput_items;    // we've got at least this many input 
items
+  int ii = 0;                          // input index
+
+  while (ii < ninput_items){
+
+    long long ni_total = ii + d_nitems;        // total items processed so far
+    if (ni_total < d_nitems_to_skip){          // need to skip some more
+
+      int n_to_skip = (int) std::min(d_nitems_to_skip - ni_total,
+                                    (long long)(ninput_items - ii));
+      ii += n_to_skip;
+    }
+
+    else {             // nothing left to skip.  copy away
+
+      int n_to_copy = ninput_items - ii;
+      if (n_to_copy > 0){
+       size_t itemsize = output_signature()->sizeof_stream_item(0);
+       memcpy(out, in + (ii*itemsize), n_to_copy*itemsize);
+      }
+
+      d_nitems += ninput_items;
+      consume_each(ninput_items);
+      return n_to_copy;
+    }
   }
 
-  return -1;//Should never get here
+  d_nitems += ninput_items;
+  consume_each(ninput_items);
+  return 0;
 }

Modified: 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_skiphead.h
===================================================================
--- 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_skiphead.h
        2007-06-02 16:13:08 UTC (rev 5605)
+++ 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_skiphead.h
        2007-06-02 20:13:34 UTC (rev 5606)
@@ -26,6 +26,10 @@
 #include <gr_sync_block.h>
 #include <stddef.h>      // size_t
 
+class gr_skiphead;
+typedef boost::shared_ptr<gr_skiphead> gr_skiphead_sptr;
+
+
 /*!
  * \brief skips the first N items, from then on copies items to the output
  * \ingroup block
@@ -33,22 +37,24 @@
  * Useful for building test cases and sources which have metadata or junk at 
the start
  */
 
-class gr_skiphead : public gr_sync_block
+class gr_skiphead : public gr_block
 {
-  friend gr_block_sptr gr_make_skiphead (size_t sizeof_stream_item, int 
nitems);
-  gr_skiphead (size_t sizeof_stream_item, int nitems);
+  friend gr_skiphead_sptr gr_make_skiphead (size_t itemsize, size_t 
nitems_to_skip);
+  gr_skiphead (size_t itemsize, size_t nitems_to_skip);
 
-  int  d_nitems;
-  int  d_nskipped_items;
+  size_t               d_nitems_to_skip;
+  long long            d_nitems;               // total items seen
 
  public:
-  int work (int noutput_items,
-     gr_vector_const_void_star &input_items,
-     gr_vector_void_star &output_items);
+
+  int general_work(int noutput_items,
+                  gr_vector_int &ninput_items,
+                  gr_vector_const_void_star &input_items,
+                  gr_vector_void_star &output_items);
 };
 
-gr_block_sptr
-gr_make_skiphead (size_t sizeof_stream_item, int nitems);
+gr_skiphead_sptr
+gr_make_skiphead (size_t itemsize, size_t nitems_to_skip);
 
 
 #endif /* INCLUDED_GR_SKIPHEAD_H */

Modified: 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_skiphead.i
===================================================================
--- 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_skiphead.i
        2007-06-02 16:13:08 UTC (rev 5605)
+++ 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_skiphead.i
        2007-06-02 20:13:34 UTC (rev 5606)
@@ -1,6 +1,6 @@
 /* -*- c++ -*- */
 /*
- * Copyright 2005 Free Software Foundation, Inc.
+ * Copyright 2005,2007 Free Software Foundation, Inc.
  * 
  * This file is part of GNU Radio
  * 
@@ -20,11 +20,11 @@
  * Boston, MA 02110-1301, USA.
  */
 
-%ignore gr_skiphead;
+GR_SWIG_BLOCK_MAGIC(gr,skiphead);
+
+gr_skiphead_sptr gr_make_skiphead (size_t itemsize, size_t nitems_to_skip);
+
 class gr_skiphead : public gr_block {
-  friend gr_block_sptr gr_make_skiphead (size_t sizeof_stream_item, int 
nitems);
-  gr_skiphead (size_t sizeof_stream_item, int nitems);
+  friend gr_skiphead_sptr gr_make_skiphead (size_t itemsize, size_t 
nitems_to_skip);
+  gr_skiphead (size_t itemsize, size_t nitems_to_skip);
 };
-
-%rename(skiphead) gr_make_skiphead;
-gr_block_sptr gr_make_skiphead (size_t sizeof_stream_item, int nitems);





reply via email to

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