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
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
00098 dest[srclen] = '\0';
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
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
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
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 {
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
00243
00244
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 }
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 }
00293
00294
00297 inline void memrrotate( void *array, size_t shift, size_t num, size_t size )
00298 {
00299 memreverse( array, num, size );
00300 memreverse( array, shift, size );
00301 memreverse( (char *)array+(size*shift), num-shift, size );
00302 }
00303
00304
00307 inline void memlrotate( void *array, size_t shift, size_t num, size_t size )
00308 {
00309 memreverse( array, shift, size );
00310 memreverse( (char *)array+(size*shift), num-shift, size );
00311 memreverse( array, num, size );
00312 }
00313 }
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