Export libwireshark symbols using WS_DLL_PUBLIC define
[jlayton/wireshark.git] / epan / dfilter / drange.h
1 /* drange.h
2  * Routines for providing general range support to the dfilter library
3  *
4  * $Id$
5  *
6  * Copyright (c) 2000 by Ed Warnicke <hagbard@physics.rutgers.edu>
7  *
8  * Wireshark - Network traffic analyzer
9  * By Gerald Combs
10  * Copyright 1999 Gerald Combs
11  * This program is free software; you can redistribute it and/or
12  * modify it under the terms of the GNU General Public License
13  * as published by the Free Software Foundation; either version 2
14  * of the License, or (at your option) any later version.
15  *
16  * This program is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19  * GNU General Public License for more details.
20  *
21  * You should have received a copy of the GNU General Public License
22  * along with this program; if not, write to the Free Software
23  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
24  */
25
26 #ifndef __DRANGE_H__
27 #define __DRANGE_H__
28
29 #include <glib.h>
30 #include "ws_symbol_export.h"
31
32 /* Please don't directly manipulate these structs.  Please use
33  * the methods provided.  If you REALLY can't do what you need to
34  * do with the methods provided please write new methods that do
35  * what you need, put them into the drange object here, and limit
36  * your direct manipulation of the drange and drange_node structs to
37  * here.
38  */
39
40 typedef enum {
41         DRANGE_NODE_END_T_UNINITIALIZED,
42         DRANGE_NODE_END_T_LENGTH,
43         DRANGE_NODE_END_T_OFFSET,
44         DRANGE_NODE_END_T_TO_THE_END
45 } drange_node_end_t;
46
47 typedef struct _drange_node {
48   gint                  start_offset;
49   gint                  length;
50   gint                  end_offset;
51   drange_node_end_t     ending;
52 } drange_node;
53
54 typedef struct _drange {
55   GSList* range_list;
56   gboolean has_total_length;
57   gint total_length;
58   gint min_start_offset;
59   gint max_start_offset;
60 } drange;
61
62 /* drange_node constructor */
63 drange_node* drange_node_new(void);
64
65 /* drange_node destructor */
66 void drange_node_free(drange_node* drnode);
67
68 /* Call drange_node destructor on all list items */
69 void drange_node_free_list(GSList* list);
70
71 /* drange_node accessors */
72 gint drange_node_get_start_offset(drange_node* drnode);
73 gint drange_node_get_length(drange_node* drnode);
74 gint drange_node_get_end_offset(drange_node* drnode);
75 drange_node_end_t drange_node_get_ending(drange_node* drnode);
76
77 /* drange_node mutators */
78 void drange_node_set_start_offset(drange_node* drnode, gint offset);
79 void drange_node_set_length(drange_node* drnode, gint length);
80 void drange_node_set_end_offset(drange_node* drnode, gint offset);
81 void drange_node_set_to_the_end(drange_node* drnode);
82
83 /* drange constructor */
84 drange* drange_new(void);
85 drange* drange_new_from_list(GSList *list);
86 drange *drange_dup(drange *org);
87
88 /* drange destructor, only use this if you used drange_new() to creat
89  * the drange
90  */
91 void drange_free(drange* dr);
92
93 /* drange accessors */
94 gboolean drange_has_total_length(drange* dr);
95 gint drange_get_total_length(drange* dr);
96 gint drange_get_min_start_offset(drange* dr);
97 gint drange_get_max_start_offset(drange* dr);
98
99 /* drange mutators */
100 void drange_append_drange_node(drange* dr, drange_node* drnode);
101 void drange_prepend_drange_node(drange* dr, drange_node* drnode);
102 void drange_foreach_drange_node(drange* dr, GFunc func, gpointer funcdata);
103
104 #endif /* ! __DRANGE_H__ */