00001 /* -*- c++ -*- */ 00002 /* 00003 * Copyright 2003 Free Software Foundation, Inc. 00004 * 00005 * This file is part of GNU Radio 00006 * 00007 * GNU Radio is free software; you can redistribute it and/or modify 00008 * it under the terms of the GNU General Public License as published by 00009 * the Free Software Foundation; either version 2, or (at your option) 00010 * any later version. 00011 * 00012 * GNU Radio is distributed in the hope that it will be useful, 00013 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00015 * GNU General Public License for more details. 00016 * 00017 * You should have received a copy of the GNU General Public License 00018 * along with GNU Radio; see the file COPYING. If not, write to 00019 * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 00020 * Boston, MA 02111-1307, USA. 00021 */ 00022 00023 /* 00024 * WARNING: This file is automatically generated by 00025 * generate_gr_fir_util.py. 00026 * 00027 * Any changes made to this file will be overwritten. 00028 */ 00029 00030 #ifndef _GR_FIR_UTIL_H_ 00031 #define _GR_FIR_UTIL_H_ 00032 00047 #include <VrComplex.h> 00048 #include <vector> 00049 00050 class gr_fir_CCF; 00051 class gr_fir_FCC; 00052 class gr_fir_CCC; 00053 class gr_fir_FFF; 00054 class gr_fir_SCC; 00055 class gr_fir_SIS; 00056 class gr_fir_FSF; 00057 00058 // structures returned by get_gr_fir_XXX_info methods 00059 00060 00061 struct gr_fir_CCF_info { 00062 const char *name; // implementation name, e.g., "generic", "SSE", "3DNow!" 00063 gr_fir_CCF *(*create)(const std::vector<float> &taps); 00064 }; 00065 00066 struct gr_fir_FCC_info { 00067 const char *name; // implementation name, e.g., "generic", "SSE", "3DNow!" 00068 gr_fir_FCC *(*create)(const std::vector<VrComplex> &taps); 00069 }; 00070 00071 struct gr_fir_CCC_info { 00072 const char *name; // implementation name, e.g., "generic", "SSE", "3DNow!" 00073 gr_fir_CCC *(*create)(const std::vector<VrComplex> &taps); 00074 }; 00075 00076 struct gr_fir_FFF_info { 00077 const char *name; // implementation name, e.g., "generic", "SSE", "3DNow!" 00078 gr_fir_FFF *(*create)(const std::vector<float> &taps); 00079 }; 00080 00081 struct gr_fir_SCC_info { 00082 const char *name; // implementation name, e.g., "generic", "SSE", "3DNow!" 00083 gr_fir_SCC *(*create)(const std::vector<VrComplex> &taps); 00084 }; 00085 00086 struct gr_fir_SIS_info { 00087 const char *name; // implementation name, e.g., "generic", "SSE", "3DNow!" 00088 gr_fir_SIS *(*create)(const std::vector<short> &taps); 00089 }; 00090 00091 struct gr_fir_FSF_info { 00092 const char *name; // implementation name, e.g., "generic", "SSE", "3DNow!" 00093 gr_fir_FSF *(*create)(const std::vector<float> &taps); 00094 }; 00095 00096 struct gr_fir_util { 00097 00098 // create a fast version of gr_fir_XXX. 00099 00100 static gr_fir_CCF *create_gr_fir_CCF (const std::vector<float> &taps); 00101 static gr_fir_FCC *create_gr_fir_FCC (const std::vector<VrComplex> &taps); 00102 static gr_fir_CCC *create_gr_fir_CCC (const std::vector<VrComplex> &taps); 00103 static gr_fir_FFF *create_gr_fir_FFF (const std::vector<float> &taps); 00104 static gr_fir_SCC *create_gr_fir_SCC (const std::vector<VrComplex> &taps); 00105 static gr_fir_SIS *create_gr_fir_SIS (const std::vector<short> &taps); 00106 static gr_fir_FSF *create_gr_fir_FSF (const std::vector<float> &taps); 00107 00108 // Get information about all gr_fir_XXX implementations. 00109 // This is useful for benchmarking, testing, etc without having to 00110 // know a priori what's linked into this image 00111 // 00112 // The caller must pass in a valid pointer to a vector. 00113 // The vector will be filled with structs describing the 00114 // available implementations. 00115 00116 static void get_gr_fir_CCF_info (std::vector<gr_fir_CCF_info> *info); 00117 static void get_gr_fir_FCC_info (std::vector<gr_fir_FCC_info> *info); 00118 static void get_gr_fir_CCC_info (std::vector<gr_fir_CCC_info> *info); 00119 static void get_gr_fir_FFF_info (std::vector<gr_fir_FFF_info> *info); 00120 static void get_gr_fir_SCC_info (std::vector<gr_fir_SCC_info> *info); 00121 static void get_gr_fir_SIS_info (std::vector<gr_fir_SIS_info> *info); 00122 static void get_gr_fir_FSF_info (std::vector<gr_fir_FSF_info> *info); 00123 00124 }; 00125 00126 #endif /* _GR_FIR_UTIL_H_ */