メインページ | アルファベット順一覧 | 構成 | ファイル一覧 | 構成メンバ | ファイルメンバ | 関連ページ

dkcStdio.h

説明を見る。
00001 
00015 #ifndef DKUTIL_C_STDIO_H
00016 #define DKUTIL_C_STDIO_H
00017 
00018 
00019 #include <stdio.h>
00020 #include <string.h>
00021 #include "dkcOSIndependent.h"
00022 
00023 #ifdef __cplusplus
00024 namespace dkutil{
00032 
00033     inline int dkmemcpy(void *dest,size_t size1,const void *src,size_t size2){
00034         if(size1 < size2) return edk_FAILED;
00035         ::memcpy(dest,src,size2);
00036         return edk_SUCCEEDED;
00037     }
00045 
00046     inline int dkmemmove( void *dest,size_t size1,const void *src, size_t size2 ){
00047         if(size1 < size2) return edk_FAILED;
00048         ::memmove(dest,src,size2);
00049         return edk_SUCCEEDED;
00050     }
00057 #   if 0
00058     inline int dksprintf(char *buff,size_t bufsize,char *format,...){
00059         BOOST_STATIC_ASSERT(!"つかうなー!");
00060         //char buff[2048]="";
00061         size_t buffnum=bufsize;
00062         char *origin = format;
00063         {
00064             va_list VaList;
00065             va_start( VaList , origin ) ;
00066             int r;
00067             r = _vsnprintf( buff ,buffnum - 1, origin , VaList );
00068             if(0 > r){
00069                 return edk_FAILED;
00070             }else{
00071                 buff[r+1] = '\0';
00072             }
00073             va_end( VaList ); 
00074         }
00075 
00076         return edk_SUCCEEDED;
00077     }
00078 #   endif //end of if 0
00079 
00094     inline int dkstrcpy(char *dest,size_t size1,const char *src,size_t srclen){
00095         if(size1 <= srclen) return edk_FAILED;
00096         ::strncpy(dest,src,srclen);
00097         //if(dest[srclen] != '\0') return edk_FAILED;
00098         dest[srclen] = '\0';//0を入れるからsrclen + 1ではない。
00099         return edk_SUCCEEDED;
00100     }
00102     inline int dkstrcpy(BYTE *dest,size_t size1,const BYTE *src,size_t srclen)
00103     {
00104         return dkstrcpy((char *)dest,size1,(const char *)src,srclen);
00105     }
00114 
00115     inline int dkstrcpy_amap(char *dest,size_t size1,const char *src,size_t srclen){
00116 #   ifndef NDEBUG
00117         dkcmFORCE_NOT_ASSERT((0 == size1 && 0 == srclen));
00118 #   endif
00119         if(size1 <= srclen){//ここは<=か!?
00120             ::strncpy(dest,src,size1);
00121             dest[size1 - 1] = '\0';
00122             return edk_Not_Satisfactory;
00123         }else{
00124             ::strncpy(dest,src,srclen);
00125             dest[srclen] = '\0';
00126             return edk_SUCCEEDED;
00127         }
00128     }
00129     inline int dkstrcpy_amap2(char *dest,size_t size1,const char *src){
00130         return dkstrcpy_amap(dest,size1,src,strlen(src));
00131     }
00144     inline int dkstrcat(char *dest,size_t destsize,size_t destlen,
00145         const char *src,size_t srclen)
00146     {
00147         //destlen + srclen + NULL文字
00148         if(destsize < destlen + srclen + 1) return edk_FAILED;
00149         ::strncat(dest,src,srclen);
00150         return edk_SUCCEEDED;
00151     }
00153     inline int dkstrcat2(char *dest,size_t destsize,const char *src){
00154         return dkstrcat(dest,destsize,strlen(dest),src,strlen(src));
00155     }
00157     inline int dkstrcat_amap(char *dest,size_t destsize,size_t destlen,
00158         const char *src,size_t srclen)
00159     {
00160         //destlen + srclen + NULL文字
00161         int result = edk_SUCCEEDED;
00162         size_t lsize = destlen + srclen + 1;
00163         if(destsize < lsize)
00164         {//オーバーしてたら・・・
00165             srclen = lsize - destsize - 1;
00166             result = edk_Not_Satisfactory;
00167         }
00168         ::strncat(dest,src,srclen);
00169         //dest[destlen + srclen - 1] = '\0';
00170         return result;
00171     }
00173     inline int dkstrcat_amap2(char *dest,size_t destsize,const char *src){
00174         return dkstrcat_amap(dest,destsize,strlen(dest),src,strlen(src));
00175     }
00176 
00185     inline int dkmemcmp( const void *buf1,size_t buf1PermitSize,
00186         const void *buf2, size_t count )
00187     {
00188         if(buf1PermitSize < count)return edk_LogicError;
00189         if(0 !=::memcmp(buf1,buf2,count))return edk_FAILED;
00190         return edk_SUCCEEDED;
00191     }
00192 
00201 
00202     template<typename TYPE_>
00203     inline int WINAPI dkcmp_base(const TYPE_ *b1,size_t b1size,
00204         const TYPE_ *b2,size_t b2size)
00205     {
00206         if(b1size < b2size) return edk_LogicError;
00207         int result = edk_SUCCEEDED;
00208         //とりあえずマッチするか確かめる。
00209         for(size_t i=0;i<b2size;i++)
00210         {
00211             if(b1[i] != b2[i])
00212             {
00213                 result = edk_FAILED;
00214                 break;
00215             }
00216         }
00217         return result;
00218     }
00219 
00228     inline int dkstrcmp(const char *b1,size_t b1size,const char *b2,size_t b2size)
00229     {
00230         //検索する文字列が多いとおかしいのでエラー
00231         if(b1size < b2size) return edk_LogicError;
00232         
00233         int result = edk_SUCCEEDED;
00234         if(b2size % 4 == 0)
00235         {//無理やりintで検索
00236             size_t fb1size = b1size / 4;
00237             size_t fb2size = b2size / 4;
00238             const int *fb1 = (const int *)b1;
00239             const int *fb2 = (const int *)b2;
00240             return dkcmp_base(fb1,fb1size,fb2,fb2size);
00241         }
00242         //else
00243         //{
00244             //basic な検索・・・。
00245             return dkcmp_base(b1,b1size,b2,b2size);
00246         //}
00247     }
00254 
00255     template<typename INTEGER_>
00256     inline size_t beam(INTEGER_ num){   
00257         
00258         size_t b = 0 ;
00259         for(INTEGER_ i = 10 ; num >= i ; i *= 10 ){
00260             b ++ ;
00261         }
00262         return b;
00263     }
00264 
00266     inline void memswap( void *va, void *vb, size_t size )
00267     {
00268         char *ca;
00269         char *cb;
00270         char  cTmp;
00271         for( ca = (char *)va, cb = (char *)vb; size > 0; size--, ca++, cb++ )
00272         {
00273             cTmp = *ca;
00274             *ca  = *cb;
00275             *cb  = cTmp;
00276         }
00277     }//memswap
00278 
00279 
00280 
00283     inline void memreverse( void *array, size_t num, size_t size )
00284     {
00285         char *l;
00286         char *r;
00287 
00288         l = (char *)array;
00289         r = (char *)array + ((num-1) * size);
00290         for( ; l < r; l = l+size, r = r-size )
00291             memswap( l, r, size );
00292     }//memreverse
00293 
00294 
00297     inline void memrrotate( void *array, size_t shift, size_t num, size_t size )
00298     {
00299         memreverse( array,                      num,       size ); // 012345678 -> 876543210
00300         memreverse( array,                      shift,     size ); // 876543210 -> 678543210
00301         memreverse( (char *)array+(size*shift), num-shift, size ); // 678543210 -> 678012345
00302     }//memrrotate
00303 
00304 
00307     inline void memlrotate( void *array, size_t shift, size_t num, size_t size )
00308     {
00309         memreverse( array,                      shift,     size ); // 012345678 -> 210345678
00310         memreverse( (char *)array+(size*shift), num-shift, size ); // 210345678 -> 210876543
00311         memreverse( array,                      num,       size ); // 210876543 -> 345678012
00312     }//memlrotate
00313 }//end of dkutil namespace
00314 #if 0
00315 inline int WINAPI dkc_memcpy(void *dest,size_t size1,const void *src,size_t size2){
00316     return dkutil::dkmemcpy(dest,size1,src,size2);
00317 }
00318 inline int WINAPI dkc_strcpy(char *dest,size_t size1,const char *src,size_t srclen){
00319     return dkutil::dkstrcpy(dest,size1,src,srclen);
00320 }
00321 inline int WINAPI dkc_strcpy(BYTE *dest,size_t size1,const BYTE *src,size_t srclen){
00322     return dkc_strcpy((char *)dest,size1,(const char *)src,srclen);
00323 }
00324 inline int WINAPI dkc_strcpy_amap(char *dest,size_t size1,const char *src,size_t srclen){
00325     return dkutil::dkstrcpy_amap(dest,size1,src,srclen);
00326 }
00328 inline int WINAPI dkc_strcpy_amap2(char *dest,size_t size1,const char *src){
00329     return dkutil::dkstrcpy_amap2(dest,size1,src);
00330 }
00332 inline int WINAPI dkc_strcat(char *dest,size_t destsize,size_t destlen,
00333         const char *src,size_t srclen)
00334 {
00335         return dkutil::dkstrcat(dest,destsize,destlen,src,srclen);
00336 }
00338 inline int WINAPI dkc_strcat2(char *dest,size_t destsize,const char *src){
00339     return dkutil::dkstrcat2(dest,destsize,src);
00340 }
00342 inline int WINAPI dkc_strcat_amap(char *dest,size_t destsize,size_t destlen,
00343         const char *src,size_t srclen)
00344 {
00345     return dkutil::dkstrcat_amap(dest,destsize,destlen,src,srclen);
00346 }
00348 inline int WINAPI dkc_strcat_amap2(char *dest,size_t destsize,const char *src){
00349     return dkutil::dkstrcat_amap2(dest,destsize,src);
00350 }
00352 inline int WINAPI dkc_memcmp( const void *buf1,size_t buf1PermitSize,
00353     const void *buf2, size_t count )
00354 {
00355     return dkutil::dkmemcmp(buf1,buf1PermitSize,buf2,count);
00356 }
00357 inline int WINAPI dkc_strcmp(const char *b1,size_t b1size,const char *b2,size_t b2size)
00358 {
00359     return dkutil::dkstrcmp(b1,b1size,b2,b2size);
00360 }
00361 inline size_t dkc_beam(int num){    
00362     return dkutil::beam(num);
00363 }
00364 
00366 inline void dkc_memswap( void *va, void *vb, size_t size )
00367 {
00368     dkutil::memswap(va,vb,size);
00369 }
00370 
00372 inline void dkc_memreverse( void *array, size_t num, size_t size )
00373 {
00374     dkutil::memreverse(array,num,size);
00375 }
00377 inline void dkc_memrrotate( void *array, size_t shift, size_t num, size_t size )
00378 {
00379     dkutil::memrrotate(array,shift,num,size);
00380 }
00381 
00383 inline void dkc_memlrotate( void *array, size_t shift, size_t num, size_t size )
00384 {
00385     dkutil::memlrotate(array,shift,num,size);
00386 }
00387 #endif//end of if 0
00388 
00389 #else //for C lang
00390 
00391 #endif //end of __cplusplus
00392 
00393 DKC_EXTERN int WINAPI dkc_memcpy(void *dest,size_t size1,const void *src,size_t size2);
00394 
00395 DKC_EXTERN int WINAPI dkc_memmove(void *dest,size_t size1,const void *src, size_t size2 );
00396 
00397 
00398 DKC_EXTERN int WINAPI dkc_strcpy(char *dest,size_t size1,const char *src,size_t srclen);
00399 
00400 DKC_EXTERN int WINAPI dkc_strcpy_amap(char *dest,size_t size1,const char *src,size_t srclen);
00402 DKC_EXTERN int WINAPI dkc_strcpy_amap2(char *dest,size_t size1,const char *src);
00404 DKC_EXTERN int WINAPI dkc_strcat(char *dest,size_t destsize,size_t destlen,
00405         const char *src,size_t srclen);
00407 DKC_EXTERN int WINAPI dkc_strcat2(char *dest,size_t destsize,const char *src);
00409 DKC_EXTERN int WINAPI dkc_strcat_amap(char *dest,size_t destsize,size_t destlen,
00410         const char *src,size_t srclen);
00412 DKC_EXTERN int WINAPI dkc_strcat_amap2(char *dest,size_t destsize,const char *src);
00414 DKC_EXTERN int WINAPI dkc_memcmp( const void *buf1,size_t buf1PermitSize,
00415     const void *buf2, size_t count );
00416 DKC_EXTERN int WINAPI dkc_strcmp(const char *b1,size_t b1size,const char *b2,size_t b2size);
00417 DKC_EXTERN size_t dkc_beam(int num);
00418 
00420 DKC_EXTERN void dkc_memswap( void *va, void *vb, size_t size );
00421 
00423 DKC_EXTERN void dkc_memreverse( void *array, size_t num, size_t size );
00425 DKC_EXTERN void dkc_memrrotate( void *array, size_t shift, size_t num, size_t size );
00426 
00428 DKC_EXTERN void dkc_memlrotate( void *array, size_t shift, size_t num, size_t size );
00429 
00438 
00439 DKC_EXTERN int dkc_stream_swap(char *memory,size_t size,size_t point);
00440 
00441 
00442 
00443 #if 0
00444 
00473 DKC_EXTERN int WINAPI strnicmp(
00474     const char *string1, const char *string2, size_t count);
00475 
00476 #endif
00477 
00478 
00479 
00480 
00481 #endif //end of include once

dkutil_cに対してTue Dec 7 01:09:57 2004に生成されました。 doxygen 1.3.6