1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
|
/*
A* -------------------------------------------------------------------
B* This file contains source code for the PyMOL computer program
C* copyright 1998-2000 by Warren Lyford Delano of DeLano Scientific.
D* -------------------------------------------------------------------
E* It is unlawful to modify or remove this copyright notice.
F* -------------------------------------------------------------------
G* Please see the accompanying LICENSE file for further information.
H* -------------------------------------------------------------------
I* Additional authors of this source file include:
-*
-*
-*
Z* -------------------------------------------------------------------
*/
#include"os_std.h"
#include"os_memory.h"
#include"mac.h"
#include"vla.h"
#include"strblock.h"
/* TEST */
#ifdef _STRLIST_UT
int main(int argc, char *argv[])
{
char *sb;
char buffer[256];
int a,b,c;
int index;
buffer[0]=0;
sb = StrBlockNew(10);
b = rand()&0xFF;
for(a=0;a<100000;a++) {
index = StrBlockNewStr(&sb,NULL,b);
for(c=0;c<b;c++) {
sb[c+index]='a';
}
}
return 0;
}
#endif
/* end unit test */
/* right now just a braindead, memory-leaky system */
int StrBlockNewStr(char **list_ptr,const char *st,int len)
{
StrBlock *I;
register int a;
register char *q;
const char *p;
char *str;
int result, new_extent;
I=*((StrBlock**)list_ptr);
new_extent = len + 1 + I->next_unused;
vla_check(I,StrBlock,new_extent);
(*((StrBlock**)list_ptr))=I;
result = I->next_unused;
str = (char*)(((char*)I)+I->next_unused);
if(st) {
p = st;
q = str;
for(a=0;a<len;a++)
*(q++)=*(p++);
} else
str[0]=0;
str[len]=0;
I->next_unused = new_extent;
return result;
}
char *StrBlockNew(int init_size)
{
StrBlock *I;
I = (StrBlock*)VLAMalloc(init_size+sizeof(StrBlock),sizeof(char),5,0);
I->next_unused = sizeof(StrBlock);
return (char*)I;
}
void StrBlockFreeStr(char *list,int index)
{
/* just leak within the array */
}
void StrBlockFree(char *list)
{
VLAFree(list);
}
|