1 /* Libvisual - The audio visualisation framework.
2  *
3  * Copyright (C) 2004, 2005, 2006 Dennis Smit <ds@nerds-incorporated.org>
4  *
5  * Authors: Dennis Smit <ds@nerds-incorporated.org>
6  *
7  * $Id: lv_buffer.h,v 1.9 2006/01/22 13:23:37 synap Exp $
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU Lesser General Public License as
11  * published by the Free Software Foundation; either version 2.1
12  * of the License, or (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU Lesser General Public License for more details.
18  *
19  * You should have received a copy of the GNU Lesser General Public License
20  * along with this program; if not, write to the Free Software
21  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22  */
23 
24 #ifndef _LV_BUFFER_H
25 #define _LV_BUFFER_H
26 
27 #include <libvisual-0.4/libvisual/lv_common.h>
28 
29 VISUAL_BEGIN_DECLS
30 
31 #define VISUAL_BUFFER(obj)				(VISUAL_CHECK_CAST ((obj), VisBuffer))
32 
33 typedef struct _VisBuffer VisBuffer;
34 
35 /**
36  * A VisBuffer destroyer function needs this signature. It can be used to destroy
37  * the content of a VisBuffer on a unref.
38  *
39  * @arg buffer The VisBuffer data structure.
40  */
41 typedef void (*VisBufferDestroyerFunc)(VisBuffer *buffer);
42 
43 /**
44  * The VisBuffer data structure holding a buffer and information regarding the buffer.
45  */
46 struct _VisBuffer {
47 	VisObject		 object;	/**< The VisObject data. */
48 
49 	int			 allocated;	/**< Is the buffer allocated or not. */
50 
51 	VisBufferDestroyerFunc	 destroyer;	/**< The destroyer function for the encapsulated data. */
52 
53 	void			*data;		/**< Pointer to the data. */
54 	visual_size_t		 datasize;	/**< The size of the data in N bytes. */
55 };
56 
57 /* prototypes */
58 VisBuffer *visual_buffer_new (void);
59 int visual_buffer_init (VisBuffer *buffer, void *data, visual_size_t datasize, VisBufferDestroyerFunc destroyer);
60 VisBuffer *visual_buffer_new_with_buffer (void *data, visual_size_t datasize, VisBufferDestroyerFunc destroyer);
61 VisBuffer *visual_buffer_new_allocate (visual_size_t datasize, VisBufferDestroyerFunc destroyer);
62 int visual_buffer_init_allocate (VisBuffer *buffer, visual_size_t datasize, VisBufferDestroyerFunc destroyer);
63 int visual_buffer_destroy_content (VisBuffer *buffer);
64 
65 int visual_buffer_set_destroyer (VisBuffer *buffer, VisBufferDestroyerFunc destroyer);
66 VisBufferDestroyerFunc visual_buffer_get_destroyer (VisBuffer *buffer);
67 
68 int visual_buffer_set_data_pair (VisBuffer *buffer, void *data, visual_size_t datasize);
69 int visual_buffer_set_size (VisBuffer *buffer, visual_size_t datasize);
70 int visual_buffer_set_data (VisBuffer *buffer, void *data);
71 int visual_buffer_allocate_data (VisBuffer *buffer);
72 
73 void *visual_buffer_get_data (VisBuffer *buffer);
74 void *visual_buffer_get_data_offset (VisBuffer *buffer, int byteoffset);
75 int visual_buffer_get_size (VisBuffer *buffer);
76 
77 int visual_buffer_get_allocated (VisBuffer *buffer);
78 
79 int visual_buffer_clone (VisBuffer *dest, VisBuffer *src);
80 VisBuffer *visual_buffer_clone_new (VisBuffer *src);
81 int visual_buffer_copy_data_to (VisBuffer *src, void *dest);
82 
83 int visual_buffer_put (VisBuffer *dest, VisBuffer *src, int byteoffset);
84 int visual_buffer_put_data (VisBuffer *dest, void *data, visual_size_t size, int byteoffset);
85 int visual_buffer_put_atomic (VisBuffer *dest, VisBuffer *src, int byteoffset);
86 int visual_buffer_put_data_atomic (VisBuffer *dest, void *data, visual_size_t size, int byteoffset);
87 
88 int visual_buffer_append (VisBuffer *dest, VisBuffer *src);
89 int visual_buffer_append_data (VisBuffer *dest, void *data, visual_size_t size);
90 
91 int visual_buffer_fill (VisBuffer *buffer, char value);
92 int visual_buffer_fill_with_pattern (VisBuffer *buffer, void *data, visual_size_t size);
93 
94 void visual_buffer_destroyer_free (VisBuffer *buffer);
95 
96 VISUAL_END_DECLS
97 
98 #endif /* _LV_BUFFER_H */
99