annotate src/gaim_buffer.h @ 13623:51d436a267ac

[gaim-migrate @ 16009] Use the GSlice allocator (for logs and log sets) when compiling with glib 2.10 or greater and eliminate some unnecessary memory zeroing. This cuts the log loading time in half for one of Luke's contacts. committer: Tailor Script <tailor@pidgin.im>
author Richard Laager <rlaager@wiktel.com>
date Tue, 11 Apr 2006 16:06:24 +0000
parents c9f536f771d0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
13200
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
1 /*
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
2 * @file gaim_buffer.h Buffer Utility Functions
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
3 * @ingroup core
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
4 *
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
5 * Gaim is the legal property of its developers, whose names are too numerous
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
6 * to list here. Please refer to the COPYRIGHT file distributed with this
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
7 * source distribution.
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
8 *
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
9 * This program is free software; you can redistribute it and/or modify
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
10 * it under the terms of the GNU General Public License as published by
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
11 * the Free Software Foundation; either version 2 of the License, or
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
12 * (at your option) any later version.
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
13 *
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
14 * This program is distributed in the hope that it will be useful,
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
17 * GNU General Public License for more details.
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
18 *
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
19 * You should have received a copy of the GNU General Public License
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
20 * along with this program; if not, write to the Free Software
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
21 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
22 */
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
23 #ifndef _GAIM_BUFFER_H
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
24 #define _GAIM_BUFFER_H
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
25
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
26 #ifdef __cplusplus
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
27 extern "C" {
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
28 #endif
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
29
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
30 typedef struct _GaimCircBuffer {
13229
cc84c3a2fe93 [gaim-migrate @ 15594]
Mark Doliner <mark@kingant.net>
parents: 13212
diff changeset
31
cc84c3a2fe93 [gaim-migrate @ 15594]
Mark Doliner <mark@kingant.net>
parents: 13212
diff changeset
32 /** A pointer to the starting address of our chunk of memory. */
13200
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
33 gchar *buffer;
13229
cc84c3a2fe93 [gaim-migrate @ 15594]
Mark Doliner <mark@kingant.net>
parents: 13212
diff changeset
34
cc84c3a2fe93 [gaim-migrate @ 15594]
Mark Doliner <mark@kingant.net>
parents: 13212
diff changeset
35 /** The incremental amount to increase this buffer by when
cc84c3a2fe93 [gaim-migrate @ 15594]
Mark Doliner <mark@kingant.net>
parents: 13212
diff changeset
36 * the buffer is not big enough to hold incoming data, in bytes. */
13200
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
37 gsize growsize;
13229
cc84c3a2fe93 [gaim-migrate @ 15594]
Mark Doliner <mark@kingant.net>
parents: 13212
diff changeset
38
cc84c3a2fe93 [gaim-migrate @ 15594]
Mark Doliner <mark@kingant.net>
parents: 13212
diff changeset
39 /** The length of this buffer, in bytes. */
13200
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
40 gsize buflen;
13229
cc84c3a2fe93 [gaim-migrate @ 15594]
Mark Doliner <mark@kingant.net>
parents: 13212
diff changeset
41
cc84c3a2fe93 [gaim-migrate @ 15594]
Mark Doliner <mark@kingant.net>
parents: 13212
diff changeset
42 /** The number of bytes of this buffer that contain unread data. */
13200
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
43 gsize bufused;
13229
cc84c3a2fe93 [gaim-migrate @ 15594]
Mark Doliner <mark@kingant.net>
parents: 13212
diff changeset
44
cc84c3a2fe93 [gaim-migrate @ 15594]
Mark Doliner <mark@kingant.net>
parents: 13212
diff changeset
45 /** A pointer to the next byte where new incoming data is
cc84c3a2fe93 [gaim-migrate @ 15594]
Mark Doliner <mark@kingant.net>
parents: 13212
diff changeset
46 * buffered to. */
13200
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
47 gchar *inptr;
13229
cc84c3a2fe93 [gaim-migrate @ 15594]
Mark Doliner <mark@kingant.net>
parents: 13212
diff changeset
48
cc84c3a2fe93 [gaim-migrate @ 15594]
Mark Doliner <mark@kingant.net>
parents: 13212
diff changeset
49 /** A pointer to the next byte of buffered data that should be
13232
c9f536f771d0 [gaim-migrate @ 15597]
Mark Doliner <mark@kingant.net>
parents: 13229
diff changeset
50 * read by the consumer. */
13200
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
51 gchar *outptr;
13229
cc84c3a2fe93 [gaim-migrate @ 15594]
Mark Doliner <mark@kingant.net>
parents: 13212
diff changeset
52
13200
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
53 } GaimCircBuffer;
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
54
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
55 /**
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
56 * Creates a new circular buffer. This will not allocate any memory for the
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
57 * actual buffer until data is appended to it.
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
58 *
13212
64bae3cbec8d [gaim-migrate @ 15576]
Mark Doliner <mark@kingant.net>
parents: 13200
diff changeset
59 * @param growsize The amount that the buffer should grow the first time data
64bae3cbec8d [gaim-migrate @ 15576]
Mark Doliner <mark@kingant.net>
parents: 13200
diff changeset
60 * is appended and every time more space is needed. Pass in
64bae3cbec8d [gaim-migrate @ 15576]
Mark Doliner <mark@kingant.net>
parents: 13200
diff changeset
61 * "0" to use the default of 256 bytes.
13200
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
62 *
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
63 * @return The new GaimCircBuffer. This should be freed with
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
64 * gaim_circ_buffer_destroy when you are done with it
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
65 */
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
66 GaimCircBuffer *gaim_circ_buffer_new(gsize growsize);
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
67
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
68 /**
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
69 * Dispose of the GaimCircBuffer and free any memory used by it (including any
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
70 * memory used by the internal buffer).
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
71 *
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
72 * @param buf The GaimCircBuffer to free
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
73 */
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
74 void gaim_circ_buffer_destroy(GaimCircBuffer *buf);
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
75
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
76 /**
13212
64bae3cbec8d [gaim-migrate @ 15576]
Mark Doliner <mark@kingant.net>
parents: 13200
diff changeset
77 * Append data to the GaimCircBuffer. This will grow the internal
64bae3cbec8d [gaim-migrate @ 15576]
Mark Doliner <mark@kingant.net>
parents: 13200
diff changeset
78 * buffer to fit the added data, if needed.
13200
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
79 *
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
80 * @param buf The GaimCircBuffer to which to append the data
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
81 * @param src pointer to the data to copy into the buffer
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
82 * @param len number of bytes to copy into the buffer
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
83 */
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
84 void gaim_circ_buffer_append(GaimCircBuffer *buf, gconstpointer src, gsize len);
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
85
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
86 /**
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
87 * Determine the maximum number of contiguous bytes that can be read from the
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
88 * GaimCircBuffer.
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
89 * Note: This may not be the total number of bytes that are buffered - a
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
90 * subsequent call after calling gaim_circ_buffer_mark_read() may indicate more
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
91 * data is available to read.
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
92 *
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
93 * @param buf the GaimCircBuffer for which to determine the maximum contiguous
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
94 * bytes that can be read.
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
95 *
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
96 * @return the number of bytes that can be read from the GaimCircBuffer
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
97 */
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
98 gsize gaim_circ_buffer_get_max_read(GaimCircBuffer *buf);
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
99
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
100 /**
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
101 * Mark the number of bytes that have been read from the buffer.
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
102 *
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
103 * @param buf The GaimCircBuffer to mark bytes read from
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
104 * @param len The number of bytes to mark as read
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
105 *
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
106 * @return TRUE if we successfully marked the bytes as having been read, FALSE
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
107 * otherwise.
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
108 */
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
109 gboolean gaim_circ_buffer_mark_read(GaimCircBuffer *buf, gsize len);
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
110
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
111 #ifdef __cplusplus
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
112 }
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
113 #endif
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
114
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff changeset
115 #endif /* _GAIM_BUFFER_H */