Thanks for the input Ed.  Some comments below

<snip>

> Purely from the point of view of "cohesion" I would recommend
> the "gr_xor_bb" form instead of passing in a selector that
> determines the behavior.  Although I must admit, I wrestled
> for quite a while with writing so much infrastructure code
> for something as simple an an "xor".


[tim] I think the auto code generators in gengen is a good compromise

[tim] One note on your nrzi_to_nrz code below.  I don't know much about
compiler optimization but I suspect

    nrz_bit = ! nrzi_bit ^ d_prev_nrzi_bit

might give you better performance than the if else.  Then again I have been
wrong more than I have been right
on this sort of thing :-)

>
>
>
> Here's the code for gr_nrzi_to_nrz_bb.  The code for xor
> is similar.
>
> @(^.^)@  Ed
>
>
> /* -*- c++ -*- */
> /*
>  * Copyright 2006 Free Software Foundation, Inc.
>  *
>  * This file is part of GNU Radio
>  *
>  * GNU Radio is free software; you can redistribute it and/or modify
>  * it under the terms of the GNU General Public License as published by
>  * the Free Software Foundation; either version 2, or (at your option)
>  * any later version.
>  *
>  * GNU Radio is distributed in the hope that it will be useful,
>  * but WITHOUT ANY WARRANTY; without even the implied warranty of
>  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>  * GNU General Public License for more details.
>  *
>  * You should have received a copy of the GNU General Public License
>  * along with GNU Radio; see the file COPYING.  If not, write to
>  * the Free Software Foundation, Inc., 51 Franklin Street,
>  * Boston, MA 02110-1301, USA.
>  */
>
> #ifdef HAVE_CONFIG_H
> #include "config.h"
> #endif
>
> #include <gr_nrzi_to_nrz_bb.h>
> #include <gr_io_signature.h>
> #include <stdexcept>
>
> gr_nrzi_to_nrz_bb_sptr
> gr_make_nrzi_to_nrz_bb (bool preload)
> {
>   return gr_nrzi_to_nrz_bb_sptr (new gr_nrzi_to_nrz_bb (preload));
> }
>
> gr_nrzi_to_nrz_bb::gr_nrzi_to_nrz_bb (bool preload)
>   : gr_sync_block ("nrzi_to_nrz_bb",
>            gr_make_io_signature (1, 1, sizeof (unsigned char)),
>            gr_make_io_signature (1, 1, sizeof (unsigned char))),
>            d_prev_nrzi_bit(preload)
> {
> }
>
> int
> gr_nrzi_to_nrz_bb::work (int                       noutput_items,
>                          gr_vector_const_void_star &input_items,
>                          gr_vector_void_star       &output_items)
> {
>   const unsigned char* in  = (const unsigned char *) input_items[0];
>   unsigned char*       out = (unsigned char *) output_items[0];
>   unsigned char        nrzi_bit;
>   unsigned char        nrz_bit;
>
>   for (int i = 0; i < noutput_items; i++)
>     {
>         nrzi_bit = in[i];
>         // Convert NRZI to NRZ.
>         if(nrzi_bit != d_prev_nrzi_bit)
>           {
>             nrz_bit = 0;
>           }
>         else
>           {
>             nrz_bit = 1;
>           }
>         out[i] = nrz_bit;
>         d_prev_nrzi_bit = nrzi_bit;
>     }
>   return noutput_items;
> }
>
>
>
>
> _______________________________________________
> Discuss-gnuradio mailing list
> Discuss-gnuradio@gnu.org
> http://lists.gnu.org/mailman/listinfo/discuss-gnuradio
>
_______________________________________________
Discuss-gnuradio mailing list
Discuss-gnuradio@gnu.org
http://lists.gnu.org/mailman/listinfo/discuss-gnuradio

Reply via email to