aboutsummaryrefslogtreecommitdiffstats
path: root/frame_data_sequence.c
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2011-04-27 04:11:37 +0000
committerGuy Harris <guy@alum.mit.edu>2011-04-27 04:11:37 +0000
commitf43797cf42cd34d217caa251566789f2a38e5424 (patch)
tree0348c7d60169fd31d87d96e4b7c6337cededc9a0 /frame_data_sequence.c
parent9e2ecb8d7af151e508b363a5d1d6462129bf5d0e (diff)
Make the frame_data_sequence structure opaque, and move some other
implementation details into frame_data_sequence.c as well. svn path=/trunk/; revision=36886
Diffstat (limited to 'frame_data_sequence.c')
-rw-r--r--frame_data_sequence.c36
1 files changed, 27 insertions, 9 deletions
diff --git a/frame_data_sequence.c b/frame_data_sequence.c
index ed1cb746a9..04016023ff 100644
--- a/frame_data_sequence.c
+++ b/frame_data_sequence.c
@@ -32,16 +32,23 @@
#include "frame_data_sequence.h"
-frame_data_sequence *
-new_frame_data_sequence(void)
-{
- frame_data_sequence *fds;
+/*
+ * We store the frame_data structures in a radix tree, with 1024
+ * elements per level. The leaf nodes are arrays of 1024 frame_data
+ * structures; the nodes above them are arrays of 1024 pointers to
+ * the nodes below them. The capture_file structure has a pointer
+ * to the root node.
+ *
+ * As frame numbers are 32 bits, and as 1024 is 2^10, that gives us
+ * up to 4 levels of tree.
+ */
+#define LOG2_NODES_PER_LEVEL 10
+#define NODES_PER_LEVEL (1<<LOG2_NODES_PER_LEVEL)
- fds = g_malloc(sizeof *fds);
- fds->count = 0;
- fds->ptree_root = NULL;
- return fds;
-}
+struct _frame_data_sequence {
+ guint32 count; /* Total number of frames */
+ void *ptree_root; /* Pointer to the root node */
+};
/*
* For a given frame number, calculate the indices into a level 3
@@ -56,6 +63,17 @@ new_frame_data_sequence(void)
#define LEAF_INDEX(framenum) \
(((framenum) >> (0*LOG2_NODES_PER_LEVEL)) & (NODES_PER_LEVEL - 1))
+frame_data_sequence *
+new_frame_data_sequence(void)
+{
+ frame_data_sequence *fds;
+
+ fds = g_malloc(sizeof *fds);
+ fds->count = 0;
+ fds->ptree_root = NULL;
+ return fds;
+}
+
/*
* Add a new frame_data structure to a frame_data_sequence.
*/