aboutsummaryrefslogtreecommitdiffstats
path: root/dotprod_port.c
diff options
context:
space:
mode:
authorMatthias P. Braendli <matthias.braendli@mpb.li>2014-01-02 21:55:13 +0100
committerMatthias P. Braendli <matthias.braendli@mpb.li>2014-01-02 21:55:13 +0100
commita31630e0d5b9880c716d9004ef4154396ba41ebc (patch)
treeaebbd3b132e5f2dd31bc34750ccded2378fc687a /dotprod_port.c
parent9aaac5be9db5e1537badc65242412ef14c5096e3 (diff)
downloadka9q-fec-a31630e0d5b9880c716d9004ef4154396ba41ebc.tar.gz
ka9q-fec-a31630e0d5b9880c716d9004ef4154396ba41ebc.tar.bz2
ka9q-fec-a31630e0d5b9880c716d9004ef4154396ba41ebc.zip
Extract fec-3.0.1
Diffstat (limited to 'dotprod_port.c')
-rw-r--r--dotprod_port.c58
1 files changed, 58 insertions, 0 deletions
diff --git a/dotprod_port.c b/dotprod_port.c
new file mode 100644
index 0000000..ef635ec
--- /dev/null
+++ b/dotprod_port.c
@@ -0,0 +1,58 @@
+/* 16-bit signed integer dot product
+ * Portable C version
+ * Copyright 2004 Phil Karn
+ * May be used under the terms of the GNU Lesser General Public License (LGPL)
+ */
+#include <stdlib.h>
+#include "fec.h"
+
+struct dotprod {
+ int len; /* Number of coefficients */
+
+ signed short *coeffs;
+};
+
+/* Create and return a descriptor for use with the dot product function */
+void *initdp_port(signed short coeffs[],int len){
+ struct dotprod *dp;
+ int j;
+
+ if(len == 0)
+ return NULL;
+
+ dp = (struct dotprod *)calloc(1,sizeof(struct dotprod));
+ dp->len = len;
+
+ /* Just one copy of the coefficients for the C version */
+ dp->coeffs = (signed short *)calloc(len,sizeof(signed short));
+ for(j=0;j<len;j++)
+ dp->coeffs[j] = coeffs[j];
+ return (void *)dp;
+}
+
+
+/* Free a dot product descriptor created earlier */
+void freedp_port(void *p){
+ struct dotprod *dp = (struct dotprod *)p;
+
+ if(dp->coeffs != NULL)
+ free(dp->coeffs);
+ free(dp);
+}
+
+/* Compute a dot product given a descriptor and an input array
+ * The length is taken from the descriptor
+ */
+long dotprod_port(void *p,signed short a[]){
+ struct dotprod *dp = (struct dotprod *)p;
+ long corr;
+ int i;
+
+ corr = 0;
+ for(i=0;i<dp->len;i++){
+ corr += (long)a[i] * dp->coeffs[i];
+ }
+ return corr;
+}
+
+