]> git.donarmstrong.com Git - biopieces.git/blob - code_c/Maasha/src/lib/mem.c
finished c fasta parser
[biopieces.git] / code_c / Maasha / src / lib / mem.c
1 #include "common.h"
2 #include "mem.h"
3
4
5 void *mem_get( size_t size )
6 {
7     /* Martin A. Hansen, May 2008 */
8
9     /* Unit test done.*/
10
11     /* Allocate a given chunk of memory to a pointer that is returned. */
12
13     void *pt;
14
15     assert( size > 0 );
16
17     if ( ( pt = malloc( size ) ) == NULL )
18     {
19         fprintf( stderr, "ERROR: Could not allocate %zu byte(s): %s\n", size, strerror( errno ) );
20         abort();
21     } 
22
23     return pt;
24 }
25
26
27 void *mem_get_zero( size_t size )
28 {
29     /* Martin A. Hansen, May 2008 */
30
31     /* Unit test done.*/
32
33     /* Allocate a given chunk of zero'ed memory to a pointer that is returned. */
34
35     void *pt;
36
37     assert( size > 0 );
38
39     pt = mem_get( size );
40
41     memset( pt, '\0', size );
42
43     return pt;
44 }
45
46
47 void *mem_resize( void *pt, size_t size )
48 {
49     /* Martin A. Hansen, May 2008 */
50
51     /* Unit test done.*/
52
53     /* Resize an allocated chunk of memory for a given pointer and new size. */
54
55     void *pt_new;
56
57     assert( size > 0 );
58
59     if ( ( pt_new = realloc( pt, size ) ) == NULL )
60     {
61         fprintf( stderr, "ERROR: Could not re-allocate %zu byte(s)\n", size );
62         abort();
63     }
64
65     return pt_new;
66 }
67
68
69 void *mem_resize_zero( void *pt, size_t old_size, size_t new_size )
70 {
71     /* Martin A. Hansen, May 2008 */
72
73     /* Unit test done.*/
74
75     /* Resize an allocated chunk of memory for a given pointer and zero any extra memory. */
76     
77     void *pt_new;
78
79     pt_new = mem_resize( pt, new_size );
80
81     if ( new_size > old_size ) {
82         memset( ( ( void * ) pt_new ) + old_size, '\0', new_size - old_size );
83     }
84
85     return pt_new;
86 }
87
88
89 void *mem_clone( void *old_pt, size_t size )
90 {
91     /* Martin A. Hansen, June 2008 */
92
93     /* Unit test done.*/
94
95     /* Clone a structure in memory and return a pointer to the clone. */
96
97     void *new_pt;
98     
99     assert( size > 0 );
100
101     new_pt = mem_get( size );
102
103     memcpy( new_pt, old_pt, size );
104
105     return new_pt;
106 }
107
108
109 void mem_free( void **ppt )
110 {
111     /* Martin A. Hansen, May 2008 */
112
113     /* Unit test done.*/
114
115     /* Free memory from a given pointer. */
116
117     free( *ppt );
118
119     *ppt = NULL;
120 }
121
122