Several enhancements to gr-trellis and gnuradio-examples/python/channel-coding:
[debian/gnuradio] / gr-trellis / src / lib / base.cc
1 /* -*- c++ -*- */\r
2 /*\r
3  * Copyright 2002 Free Software Foundation, Inc.\r
4  *\r
5  * This file is part of GNU Radio\r
6  *\r
7  * GNU Radio is free software; you can redistribute it and/or modify\r
8  * it under the terms of the GNU General Public License as published by\r
9  * the Free Software Foundation; either version 2, or (at your option)\r
10  * any later version.\r
11  *\r
12  * GNU Radio is distributed in the hope that it will be useful,\r
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
15  * GNU General Public License for more details.\r
16  *\r
17  * You should have received a copy of the GNU General Public License\r
18  * along with GNU Radio; see the file COPYING.  If not, write to\r
19  * the Free Software Foundation, Inc., 59 Temple Place - Suite 330,\r
20  * Boston, MA 02111-1307, USA.\r
21  */\r
22 \r
23 #include <cstdio>\r
24 #include <stdexcept>\r
25 #include <cmath>\r
26 #include "base.h"\r
27 \r
28 \r
29 bool dec2base(unsigned int num, int base, std::vector<int> &s)\r
30 {\r
31   int l = s.size();\r
32   unsigned int n=num;\r
33   for(int i=0;i<l;i++) {\r
34     s[l-i-1] = n % base; //MSB first\r
35     n /= base;\r
36   }\r
37   if(n!=0) {\r
38     printf("Number %d requires more than %d digits.",num,l);\r
39     return false;\r
40   }\r
41   else\r
42     return true;\r
43 }\r
44 \r
45 \r
46 unsigned int base2dec(const std::vector<int> &s, int base)\r
47 {\r
48   int l = s.size();\r
49   unsigned int num=0;\r
50   for(int i=0;i<l;i++)\r
51       num=num*base+s[i];\r
52   return num;\r
53 }\r
54 \r
55 \r
56 bool dec2bases(unsigned int num, const std::vector<int> &bases, std::vector<int> &s)\r
57 {\r
58   int l = s.size();\r
59   unsigned int n=num;\r
60   for(int i=0;i<l;i++) {\r
61       s[l-i-1] = n % bases[l-i-1];\r
62       n /= bases[l-i-1];\r
63   }\r
64   if(n!=0) {\r
65     printf("Number %d requires more than %d digits.",num,l);\r
66     return false;\r
67   }\r
68   else\r
69     return true;\r
70 }\r
71 \r
72 \r
73 \r
74 unsigned int bases2dec(const std::vector<int> &s, const std::vector<int> &bases)\r
75 {\r
76   int l = s.size();\r
77   unsigned int num=0;\r
78   for(int i=0;i<l;i++)\r
79       num = num * bases[i] + s[i];\r
80   return num;\r
81 }\r
82 \r
83 \r
84 \r
85 \r
86 \r
87 \r
88 \r
89 \r
90 \r
91 \r
92 \r