gft_gpqueue_by_Falcao.h
Go to the documentation of this file.
1 #ifndef _GFT_GQUEUE_H_
2 #define _GFT_GQUEUE_H_
3 
4 #include "gft_common.h"
5 
6 namespace gft{
7  namespace GQueue{
8 
9 #define MINVALUE 0 /* define queue to remove node with minimum value */
10 #define MAXVALUE 1 /* define queue to remove node with maximum value */
11 #define FIFOBREAK 0 /* define queue to solve ambiguity by FIFO */
12 #define LIFOBREAK 1 /* define queue to solve ambiguity by LIFO */
13 #define QSIZE 32768
14 
15  typedef struct _gqnode {
16  int next; /* next node */
17  int prev; /* prev node */
18  char color; /* WHITE=0, GRAY=1, BLACK=2 */
19  } GQNode;
20 
21  typedef struct _gdoublylinkedlists {
22  GQNode *elem; /* all possible doubly-linked lists of
23  the circular queue */
24  int nelems; /* total number of elements */
25  int *value; /* the value of the nodes in the graph */
27 
28  typedef struct _gcircularqueue {
29  int *first; /* list of the first elements of each
30  doubly-linked list */
31  int *last; /* list of the last elements of each
32  doubly-linked list */
33  int nbuckets; /* number of buckets in the circular queue */
34  int minvalue; /* minimum value of a node in queue */
35  int maxvalue; /* maximum value of a node in queue */
36  char tiebreak; /* 1 is LIFO, 0 is FIFO (default) */
37  char removal_policy; /* 0 is MINVALUE and 1 is MAXVALUE */
39 
40  typedef struct _gqueue { /* Priority queue by Dial implemented as
41  proposed by A. Falcao */
44  } GQueue;
45 
46  GQueue *Create(int nbuckets, int nelems, int *value);
47  void Destroy(GQueue **Q);
48  void Reset(GQueue *Q);
49  int IsEmpty(GQueue *Q);
50  void Insert(GQueue **Q, int elem);
51  int Remove(GQueue *Q);
52  void RemoveElem(GQueue *Q, int elem);
53  void Update(GQueue **Q, int elem, int newvalue);
54  GQueue *Grow(GQueue **Q, int nbuckets);
55 
56  inline void SetTieBreak(GQueue *Q, char tiebreak){
57  Q->C.tiebreak = tiebreak;
58  }
59 
60  inline void SetRemovalPolicy(GQueue *Q, char policy){
61  Q->C.removal_policy = policy;
62  }
63 
64  } //end GQueue namespace
65 } //end gft namespace
66 
67 #endif
68 
int * last
Definition: gft_gpqueue_by_Falcao.h:31
void SetTieBreak(GQueue *Q, char tiebreak)
Definition: gft_gpqueue_by_Falcao.h:56
GCircularQueue C
Definition: gft_gpqueue_by_Falcao.h:42
GDoublyLinkedLists L
Definition: gft_gpqueue_by_Falcao.h:43
char color
Definition: gft_gpqueue_by_Falcao.h:18
void RemoveElem(GQueue *Q, int elem)
Definition: gft_gpqueue_by_Falcao.cpp:255
struct gft::GQueue::_gqueue GQueue
int IsEmpty(GQueue *Q)
Definition: gft_gpqueue_by_Falcao.cpp:296
char tiebreak
Definition: gft_gpqueue_by_Falcao.h:36
void Update(GQueue **Q, int elem, int newvalue)
Definition: gft_gpqueue_by_Falcao.cpp:290
GQNode * elem
Definition: gft_gpqueue_by_Falcao.h:22
Header file for common definitions and function prototypes.
void Insert(GQueue **Q, int elem)
Definition: gft_gpqueue_by_Falcao.cpp:149
int next
Definition: gft_gpqueue_by_Falcao.h:16
int * first
Definition: gft_gpqueue_by_Falcao.h:29
struct gft::GQueue::_gqnode GQNode
void Destroy(GQueue **Q)
Definition: gft_gpqueue_by_Falcao.cpp:108
void Reset(GQueue *Q)
Definition: gft_gpqueue_by_Falcao.cpp:92
GQueue * Grow(GQueue **Q, int nbuckets)
Definition: gft_gpqueue_by_Falcao.cpp:121
Definition: gft_gpqueue_by_Falcao.h:21
GQueue * Create(int nbuckets, int nelems, int *value)
Definition: gft_gpqueue_by_Falcao.cpp:64
void SetRemovalPolicy(GQueue *Q, char policy)
Definition: gft_gpqueue_by_Falcao.h:60
struct gft::GQueue::_gdoublylinkedlists GDoublyLinkedLists
int Remove(GQueue *Q)
Definition: gft_gpqueue_by_Falcao.cpp:186
int minvalue
Definition: gft_gpqueue_by_Falcao.h:34
int nbuckets
Definition: gft_gpqueue_by_Falcao.h:33
int * value
Definition: gft_gpqueue_by_Falcao.h:25
struct gft::GQueue::_gcircularqueue GCircularQueue
int nelems
Definition: gft_gpqueue_by_Falcao.h:24
int maxvalue
Definition: gft_gpqueue_by_Falcao.h:35
int prev
Definition: gft_gpqueue_by_Falcao.h:17
Definition: gft_gpqueue_by_Falcao.h:15
Definition: gft_gpqueue_by_Falcao.h:28
char removal_policy
Definition: gft_gpqueue_by_Falcao.h:37
Definition: gft_gpqueue_by_Falcao.h:40