7 ** Copyright 2000-2003 Double Precision, Inc.
8 ** See COPYING for distribution information.
12 #include "rfc822/config.h"
20 ** Implement REFERENCES threading.
23 /* The data structures */
26 struct imap_refmsg
*next
, *last
; /* Link list of all msgs */
27 struct imap_refmsg
*parent
; /* my parent */
28 struct imap_refmsg
*firstchild
, *lastchild
; /* Children link list */
29 struct imap_refmsg
*prevsib
, *nextsib
; /* Link list of siblings */
31 char isdummy
; /* this is a dummy node (for now) */
32 char flag2
; /* Additional flag */
34 char *msgid
; /* msgid of this message */
36 char *subj
; /* dynalloced subject of this msg */
37 time_t timestamp
; /* Timestamp */
38 unsigned long seqnum
; /* Sequence number */
41 struct imap_refmsgtable
{
42 struct imap_refmsg
*firstmsg
, *lastmsg
; /* Link list of all msgs */
44 /* hash table message id lookup */
46 struct imap_refmsghash
*hashtable
[512];
48 struct imap_subjlookup
*subjtable
[512];
50 struct imap_refmsg
*rootptr
; /* The root */
53 struct imap_refmsgtable
*rfc822_threadalloc(void);
54 void rfc822_threadfree(struct imap_refmsgtable
*);
55 struct imap_refmsg
*rfc822_threadmsg(struct imap_refmsgtable
*mt
,
58 const char *subjheader
,
60 const char *dateheader
,
62 /* Set one or other */
64 unsigned long seqnum
);
66 struct imap_refmsg
*rfc822_threadmsgrefs(struct imap_refmsgtable
*mt
,
68 const char * const * msgidList
,
69 const char *subjheader
,
70 const char *dateheader
,
72 unsigned long seqnum
);
74 struct imap_refmsg
*rfc822_thread(struct imap_refmsgtable
*mt
);
76 /* INTERNAL FUNCTIONS FOLLOW */
79 struct imap_refmsghash
{
80 struct imap_refmsghash
*nexthash
;
81 struct imap_refmsg
*msg
;
84 struct imap_subjlookup
{
85 struct imap_subjlookup
*nextsubj
;
87 struct imap_refmsg
*msg
;
91 struct imap_refmsg
*rfc822_threadallocmsg(struct imap_refmsgtable
*mt
,
93 void rfc822_threadprune(struct imap_refmsgtable
*mt
);
94 struct imap_refmsg
*rfc822_threadgetroot(struct imap_refmsgtable
*mt
);
95 struct imap_refmsg
*rfc822_threadsearchmsg(struct imap_refmsgtable
*mt
,
97 int rfc822_threadsortsubj(struct imap_refmsg
*root
);
98 int rfc822_threadgathersubj(struct imap_refmsgtable
*mt
,
99 struct imap_refmsg
*root
);
100 int rfc822_threadmergesubj(struct imap_refmsgtable
*mt
,
101 struct imap_refmsg
*root
);
102 int rfc822_threadsortbydate(struct imap_refmsgtable
*mt
);