00001 #include "base/Buffer.h" 00002 00003 #include <stdlib.h> 00004 #include <string.h> 00005 00006 void base::Buffer::reset() 00007 { 00008 if (fRec!=0) { 00009 if (--fRec->refcnt == 0) 00010 free(fRec); 00011 fRec = 0; 00012 } 00013 } 00014 00015 void base::Buffer::makecopyof(void* buf, unsigned datalen) 00016 { 00017 reset(); 00018 00019 if ((buf==0) || (datalen==0)) return; 00020 00021 fRec = (RawDataRec*) malloc(sizeof(RawDataRec) + datalen); 00022 00023 fRec->reset(); 00024 00025 fRec->refcnt = 1; 00026 00027 fRec->buf = (char*) fRec + sizeof(RawDataRec); 00028 memcpy(fRec->buf, buf, datalen); 00029 00030 fRec->datalen = datalen; 00031 } 00032 00033 void base::Buffer::makereferenceof(void* buf, unsigned datalen) 00034 { 00035 reset(); 00036 00037 if ((buf==0) || (datalen==0)) return; 00038 00039 fRec = (RawDataRec*) malloc(sizeof(RawDataRec)); 00040 00041 fRec->reset(); 00042 00043 fRec->refcnt = 1; 00044 00045 fRec->buf = buf; 00046 00047 fRec->datalen = datalen; 00048 }