aboutsummaryrefslogtreecommitdiffstats
path: root/src/egprs_rlc_compression.h
diff options
context:
space:
mode:
authorPravin Kumarvel <pmanohar@radisys.com>2016-10-17 11:00:57 +0530
committerPravin Kumarvel <pmanohar@radisys.com>2016-10-17 11:00:57 +0530
commit0a4a6c120040c8dd0744f745e08f24624df62647 (patch)
treebb26bcb0e1127248a86f246a13ac177b27f88a94 /src/egprs_rlc_compression.h
parent6348aea6a2cdc753021e5324a0dd2aecf8791f10 (diff)
EGPRS: Add EPDAN CRBB Tree based decoding
Implemented tree based algorithm to decode compressed bitmap in EPDAN as described in section 9.1.10 of 3GPP 44.060. This algorithm intends to improve the performance over existing method. New Regression test is added under bitcomp directory. Test case is added to validate decompressed result of the bitmap Present in EPDAN. Test is done for multiple bitmaps of varying length. Invalid inputs are also part of the test vector. Change-Id: Ieae1992ed4b02bb1e09eec2d3de1a030eabd16ce
Diffstat (limited to 'src/egprs_rlc_compression.h')
-rw-r--r--src/egprs_rlc_compression.h29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/egprs_rlc_compression.h b/src/egprs_rlc_compression.h
new file mode 100644
index 0000000..c5f0f1a
--- /dev/null
+++ b/src/egprs_rlc_compression.h
@@ -0,0 +1,29 @@
+/* egprs_rlc_compression.h
+ * Routines for EGPRS RLC bitmap compression handling
+ */
+
+#pragma once
+
+struct egprs_compress_node;
+
+/* Singleton to manage the EGPRS compression algorithm. */
+class egprs_compress
+{
+public:
+ static int decompress_crbb(int8_t compress_bmap_len,
+ bool start, const uint8_t *orig_buf,
+ bitvec *dest);
+ egprs_compress();
+
+private:
+ egprs_compress_node *ones_list;
+ egprs_compress_node *zeros_list;
+
+ void decode_tree_init(void);
+ static egprs_compress *s_instance;
+ static egprs_compress*instance();
+ egprs_compress_node *create_tree_node(void *);
+ void build_codewords(egprs_compress_node *root, const char *cdwd[]);
+ /* singleton class, so this private destructor is left unimplemented. */
+ ~egprs_compress();
+};