00001 
00002 #ifndef  __JBXL_BUFFER_H_
00003 #define  __JBXL_BUFFER_H_
00004 
00005 
00016 #include "tools.h"
00017 
00018 
00038 typedef struct _Buffer {
00039     int   bufsz;           
00040     int   vldsz;           
00041     int   state;           
00042     unsigned char* buf;    
00043 } Buffer;
00044 
00045 
00046 #define  BUFFER_FACT   (1.3)        
00047 
00048 
00060 #define make_Buffer_bystr(str)      set_Buffer((void*)(str), -1)        
00061 #define make_Buffer_bybin(str, len) set_Buffer((void*)(str), (len))     
00062 #define make_Buffer_byrandomstr(sz) make_Buffer_randomstr(sz)           
00063 
00064 #define make_Buffer_str(str)        set_Buffer((void*)(str), -1)        
00065 #define make_Buffer_bin(str, len)   set_Buffer((void*)(str), (len))     
00066 #define make_Buffer_randomstr(sz)   make_Buffer_randomstr(sz)           
00067 
00068 
00069 Buffer* new_Buffer(int sz);                                 
00070 Buffer  init_Buffer(void);                                  
00071 Buffer  make_Buffer(int sz);                                
00072 Buffer  make_Buffer_bychar(unsigned char cc);               
00073 Buffer  make_Buffer_randomstr(int sz);                      
00074 Buffer  set_Buffer(void* buf, int sz);                      
00075 Buffer  dup_Buffer(Buffer buf);                             
00076 Buffer  rept_Buffer(unsigned char cc, int n);               
00077 
00078 void    expand_Buffer(Buffer* buf, int len);                
00079 
00080 void    del_Buffer(Buffer** buf);                           
00081 void    free_Buffer(Buffer* buf);                           
00082 void    clear_Buffer(Buffer* buf);                          
00083 
00084 int     copy_Buffer(Buffer* src, Buffer* dst);              
00085 int     cat_Buffer (Buffer* src, Buffer* dst);              
00086 int     ins_Buffer (Buffer* src, Buffer* dst);              
00087 
00088 int     copy_b2Buffer(void* src, Buffer* dst, int sz);      
00089 int     cat_b2Buffer (void* src, Buffer* dst, int sz);      
00090 int     ins_b2Buffer (void* src, Buffer* dst, int sz);      
00091 
00092 int     copy_i2Buffer(int src, Buffer* dst);                
00093 int     cat_i2Buffer (int src, Buffer* dst);                
00094 int     ins_i2Buffer (int src, Buffer* dst);                
00095 
00096 
00108 #define copy_s2Buffer(src, dst)    copy_b2Buffer((void*)(src), (dst), (int)strlen((char*)(src)))    
00109 
00110 
00122 #define cat_s2Buffer(src, dst)     cat_b2Buffer( (void*)(src), (dst), (int)strlen((char*)(src)))    
00123 #define ins_s2Buffer(src, dst)     ins_b2Buffer( (void*)(src), (dst), (int)strlen((char*)(src)))    
00124 
00125 
00126 
00127 void    kanji_convert_Buffer(Buffer* mesg);             
00128 Buffer  encode_base64_Buffer(Buffer buf);               
00129 Buffer  decode_base64_Buffer(Buffer buf);               
00130 Buffer  encode_base64_filename_Buffer(Buffer buf);      
00131 Buffer  decode_base64_filename_Buffer(Buffer buf);      
00132 
00133 Buffer  get_line_Buffer(Buffer buf, int n);             
00134 Buffer  get_seq_data_Buffer(Buffer str, int* ptr);      
00135 Buffer  awk_Buffer (Buffer buf, char cc, int n);        
00136 Buffer  cawk_Buffer(Buffer buf, char cc, int n);        
00137 Buffer  pack_Buffer(Buffer buf, char cc);               
00138 
00139 int     cmp_Buffer(Buffer src, Buffer dst, int n);      
00140 void    chomp_Buffer(Buffer* buf);                      
00141 int     isText_Buffer(Buffer buf);                      
00142 Buffer  dump_Buffer(Buffer buf);                        
00143 int     recalc_strlen_Buffer(Buffer* buf);              
00144 
00145 #define strcmp_Buffer(a, b)            cmp_Buffer((a), (b), 0)      
00146 #define strncmp_Buffer(a, b, n)        cmp_Buffer((a), (b), (n))    
00147 #define bincmp_Buffer(a, b)            cmp_Buffer((a), (b), 0)      
00148 #define binncmp_Buffer(a, b, n)        cmp_Buffer((a), (b), (n))    
00149 
00150 Buffer  randstr_Buffer(int n);         
00151 Buffer  randbit_Buffer(int n);         
00152 
00153 
00154 
00155 int     fgets_Buffer(Buffer* str, FILE* fp);            
00156 int     read_lines_Buffer(Buffer* str, FILE* fp);       
00157 
00158 Buffer  read_Buffer_file(const char* fn);               
00159 Buffer  read_Buffer_data(FILE* fp, int sz);             
00160 int     save_Buffer_file(Buffer buf, char* fn);         
00161 
00162 
00163 
00164 Buffer  erase_bBuffer(Buffer buf, char* bin, int len);  
00165 #define erase_Buffer(b, f)              erase_bBuffer((b), (char*)((f).buf), (f).vldsz)  
00166 #define erase_sBuffer(b, f)             erase_bBuffer((b), (char*)(f), strlen(f))        
00167 
00168 
00169 
00170 Buffer  replace_sBuffer_bystr(Buffer buf, const char* frm, const char* tos);        
00171 int     replace_sBuffer_file(char* fn, Buffer frm, Buffer tos);                     
00172 #define replace_sBuffer_str(buf, f, t)  replace_sBuffer_bystr((buf), (f), (t))      
00173 #define replace_sBuffer(buf, f, t)      replace_sBuffer_bystr((buf), (f), (t))      
00174 
00175 
00176 
00177 void    rewrite_sBuffer_bystr(Buffer* buf, const char* frm, const char* tos);       
00178 #define rewrite_sBuffer_str(b, f, t)  rewrite_sBuffer_bystr((b), (f), (t))          
00179 #define rewrite_sBuffer(b, f, t)  rewrite_sBuffer_bystr((b), (f), (t))              
00180 #define rewrite_sBuffer_file(f, fr, to) replace_sBuffer_file((f), (fr), (to))       
00181 
00182 
00183 
00184 int     save_Buffer_fp(Buffer, FILE*);                              
00185 Buffer  read_Buffer_fp(FILE*);                                      
00186 int     save_Buffer2_fp(Buffer  key, Buffer  buf, FILE* fp);        
00187 int     read_Buffer2_fp(Buffer* key, Buffer* buf, FILE* fp);        
00188 
00189 
00190 
00191 char    pop_char_ringStack(Buffer* buf);                            
00192 void    push_char_ringStack(Buffer* buf, char cc);                  
00193 
00194 
00195 
00196 #endif
00197