#include "dkcOSIndependent.h"
#include "dkcMemoryStream.h"
dkcString.hのインクルード依存関係図
このグラフは、どのファイルから直接、間接的にインクルードされているかを示しています。
構成 | |
struct | dkc_String |
マクロ定義 | |
#define | UCHAR_MAX_STR "255" |
#define | UCHAR_MAX_STR_LEN 3 |
unsigned char のMAX時の文字列の長さ(NULL文字無し) | |
#define | USHRT_MAX_STR "65535" |
#define | USHRT_MAX_STR_LEN 5 |
#define | SHRT_MAX_STR "32767" |
(signed) short の最大値 の文字列 | |
#define | SHRT_MAX_STR_LEN 5 |
#define | SHRT_MIN_STR "-32768" |
(signed) short の最小値 の文字列 | |
#define | SHRT_MIN_STR_LEN 6 |
#define | INT_MAX_STR "2147483647" |
(signed) int の最大値の文字列 | |
#define | INT_MAX_STR_LEN 10 |
#define | UINT_MAX_STR "4294967295" |
(0xffffffff) unsigned int の最大値の文字列 | |
#define | UINT_MAX_STR_LEN 10 |
#define | INT_MIN_STR "-2147483648" |
INT_MINの文字列 | |
#define | INT_MIN_STR_LEN 11 |
#define | ULONG_MAX_STR "4294967295" |
(0xffffffff) unsigned int の最大値 の文字列 | |
#define | ULONG_MAX_STR_LEN 10 |
#define | LONGLONG_MAX_STR "9223372036854775807" |
#define | LONGLONG_MAX_STR_LEN 19 |
#define | LONGLONG_MIN_STR "-9223372036854775808" |
#define | LONGLONG_MIN_STR_LEN 20 |
#define | ULONGLONG_MAX_STR "18446744073709551615" |
#define | ULONGLONG_MAX_STR_LEN 20 |
#define | DBL_MAX_STR "179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.000000" |
doubleが最大のときの文字列 | |
#define | DBL_MAX_STR_LEN 316 |
doubleが最大のときの桁数(文字列の) | |
#define | DBL_MIN_STR "0.000000" |
doubleが最小のときの文字列 | |
#define | DBL_MIN_STR_LEN 8 |
doubleが最小のときも桁数(文字列の) | |
#define | dkcmIsSJIS1(c) dkcIsSJIS1(c) |
#define | dkcmIsSJIS2(c) dkcIsSJIS2(c) |
型定義 | |
typedef dkc_String | DKC_STRING |
列挙型 | |
enum | edkcString { edkcCHARString = 1, edkcWCHARString } |
関数 | |
DKC_EXTERN BOOL | dkcIsSJIS1 (BYTE c) |
DKC_EXTERN BOOL | dkcIsSJIS2 (BYTE c) |
DKC_EXTERN BOOL | dkcIsSpace (BYTE c) |
DKC_EXTERN const char * | dkcGetSpaceSeparator () |
DKC_EXTERN int WINAPI | dkcSJIS_StrChrSearch (const char *s, char c) |
SJIS文字を除外して文字を検索 | |
DKC_EXTERN int WINAPI | dkcSJIS_StrChrSearchLast (const char *s, char c) |
SJIS文字を除外して文字を検索 | |
DKC_EXTERN int WINAPI | dkcSJIS_StrChrSearchTail (const char *s, size_t len, char c) |
DKC_EXTERN int WINAPI | dkcSJIS_StrChrSearchInStr (const char *s, const char *c) |
DKC_EXTERN int WINAPI | dkcSJIS_StrChrSearchInStrLast (const char *s, const char *c) |
DKC_EXTERN int WINAPI | dkcSJIS_SearchPathSep (const char *s) |
DKC_EXTERN int WINAPI | dkcSJIS_SearchPathSepLast (const char *s) |
DKC_EXTERN int WINAPI | dkcStrStr (const char *dest, const char *src) |
DKC_EXTERN int WINAPI | dkcBMStrStr (const char *dest, const char *src) |
DKC_EXTERN DKC_STRING *WINAPI | dkcAllocString (size_t size) |
DKC_EXTERN int WINAPI | dkcFreeString (DKC_STRING **ptr) |
DKC_EXTERN int WINAPI | dkcStringCopy (DKC_STRING *ptr, const char *str, size_t size) |
DKC_EXTERN int WINAPI | dkcStringConcatenate (DKC_STRING *ptr, const char *str, size_t size) |
http://www.google.com/search?num=50&hl=ja&lr=lang_ja&q=strcat+cat%82%c6%82%cd | |
DKC_EXTERN int WINAPI | dkcStringInsert (DKC_STRING *ptr, size_t point, const char *str, size_t size) |
DKC_EXTERN int WINAPI | dkcStringErase (DKC_STRING *ptr, size_t point, size_t len) |
DKC_EXTERN int WINAPI | dkcStringReplace (DKC_STRING *ptr, size_t begin_, size_t end_, const char *str, size_t size) |
DKC_EXTERN size_t | dkcStringNum (const DKC_STRING *ptr) |
DKC_EXTERN size_t | dkcStringSize (const DKC_STRING *ptr) |
DKC_EXTERN const char *WINAPI | dkcStringPointer (const DKC_STRING *ptr) |
DKC_EXTERN int WINAPI | dkcStringGetBuffer (const DKC_STRING *ptr, char *buffer, size_t buffsize) |
DKC_STRINGの内部文字列をバッファにぶち込む |
dkcString.h で定義されています。
|
doubleが最大のときの文字列
dkcString.h の 75 行で定義されています。 |
|
doubleが最大のときの桁数(文字列の)
dkcString.h の 77 行で定義されています。 |
|
doubleが最小のときの文字列
dkcString.h の 80 行で定義されています。 |
|
doubleが最小のときも桁数(文字列の)
dkcString.h の 82 行で定義されています。 |
|
|
|
(signed) int の最大値の文字列
dkcString.h の 42 行で定義されています。 |
|
dkcString.h の 44 行で定義されています。 |
|
INT_MINの文字列
dkcString.h の 52 行で定義されています。 |
|
dkcString.h の 55 行で定義されています。 |
|
dkcString.h の 62 行で定義されています。 |
|
dkcString.h の 64 行で定義されています。 |
|
dkcString.h の 66 行で定義されています。 |
|
dkcString.h の 68 行で定義されています。 |
|
(signed) short の最大値 の文字列
dkcString.h の 32 行で定義されています。 |
|
dkcString.h の 34 行で定義されています。 |
|
(signed) short の最小値 の文字列
dkcString.h の 37 行で定義されています。 |
|
dkcString.h の 39 行で定義されています。 |
|
dkcString.h の 22 行で定義されています。 |
|
unsigned char のMAX時の文字列の長さ(NULL文字無し)
dkcString.h の 24 行で定義されています。 |
|
(0xffffffff) unsigned int の最大値の文字列
dkcString.h の 47 行で定義されています。 |
|
dkcString.h の 49 行で定義されています。 |
|
(0xffffffff) unsigned int の最大値 の文字列
dkcString.h の 58 行で定義されています。 |
|
dkcString.h の 60 行で定義されています。 |
|
dkcString.h の 70 行で定義されています。 |
|
dkcString.h の 72 行で定義されています。 |
|
dkcString.h の 27 行で定義されています。 |
|
dkcString.h の 29 行で定義されています。 |
|
文字列を格納する構造体(C++のSTLのstdstringみたいなもの) |
|
dkcString.h の 102 行で定義されています。 00102 { 00103 edkcCHARString = 1, 00104 edkcWCHARString, 00105 };
|
|
dkcString.c の 225 行で定義されています。 参照先 dkcAllocate(), dkcAllocMemoryStream(), dkcFree(), dkc_String::mByteSize, dkc_String::mStream, と NULL. 参照元 dkcAllocPathString(). 00225 { 00226 DKC_STRING *p; 00227 //へんな引数は除外 00228 //if(dkcErrorFlagCheck(flag)) return edk_ArgumentException; 00229 00230 p = (DKC_STRING *)dkcAllocate(sizeof(DKC_STRING)); 00231 if(NULL==p) return NULL; 00232 00233 p->mStream = dkcAllocMemoryStream(size + 1); 00234 if(NULL==p->mStream) goto Error; 00235 00236 p->mByteSize = 0; 00237 00238 return p; 00239 Error: 00240 dkcFree((void **)&p); 00241 return NULL; 00242 }
|
|
strstrをBM法でやってみたもの
dkcString.c の 216 行で定義されています。 参照先 dkcBMStrStrLogic(). 00217 { 00218 return dkcBMStrStrLogic(dest,src); 00219 }
|
|
dkcString.c の 244 行で定義されています。 参照先 dkcFree(), dkcFreeMemoryStream(), と NULL. 参照元 dkcAllocPathString(), と dkcFreePathString(). 00244 { 00245 //変な引数入れるな! 00246 if(NULL==ptr || NULL==*ptr || NULL==(*ptr)->mStream){return edk_ArgumentException;} 00247 dkcFreeMemoryStream(&(*ptr)->mStream); 00248 return dkcFree((void **)ptr); 00249 }
|
|
dkcString.c の 65 行で定義されています。 00065 { 00066 static const char temp[]={ 00067 '\0',0x0a,0x0d,' ','\t' 00068 }; 00069 return temp; 00070 }
|
|
dkcString.c の 40 行で定義されています。 00041 { 00042 // 普通に書けばこのような感じだが、高速化する 00043 // if((c >= SJIS1_S1 && c <= SJIS1_E1) || (c >= SJIS1_S2 && c <= SJIS1_E2)) return TRUE; 00044 /* 00045 c ^= 0x20; 00046 if(c >= (SJIS1_S1 ^ 0x20) && c <= (SJIS1_E2 ^ 0x20)) return TRUE; 00047 return FALSE; 00048 */ 00049 return ((c ^= 0x20) && (c >= (SJIS1_S1 ^ 0x20) && c <= (SJIS1_E2 ^ 0x20))); 00050 }
|
|
dkcString.c の 52 行で定義されています。 参照先 SJIS2_E1, SJIS2_E2, SJIS2_S1, と SJIS2_S2. 00053 { 00054 /*if(dkcmIsSJIS2(c)) return TRUE; 00055 return FALSE; 00056 */ 00057 return (c >= SJIS2_S1 && c <= SJIS2_E1) || (c >= SJIS2_S2 && c <= SJIS2_E2); 00058 }
|
|
dkcString.c の 60 行で定義されています。
|
|
dkcString.c の 155 行で定義されています。 参照先 dkcGetPathSep(), と dkcSJIS_StrChrSearchInStr(). 参照元 dkcPathStringElementErase_Logic(), dkcPathStringElementReplace_Logic(), と dkcPathStringGetFileExtension(). 00156 { 00157 const char *target = dkcGetPathSep(); 00158 return dkcSJIS_StrChrSearchInStr(s,target); 00159 }
|
|
dkcString.c の 161 行で定義されています。 参照先 dkcGetPathSep(), と dkcSJIS_StrChrSearchInStrLast(). 参照元 dkcIsTailPathSep(), と dkcPathStringGetFileName(). 00162 { 00163 const char *target = dkcGetPathSep(); 00164 return dkcSJIS_StrChrSearchInStrLast(s,target); 00165 }
|
|
SJIS文字を除外して文字を検索
dkcString.c の 73 行で定義されています。 参照先 dkcmIsSJIS1, と dkcmIsSJIS2. 参照元 dkcIsRelativityPath(), dkcPathStringDevideBegin_Logic(), dkcPathStringDevideNext_Logic(), と dkcPathStringGetDrive(). 00074 { 00075 // c == 0 も考慮している 00076 int i; 00077 for(i = 0; ; i++){ 00078 if(s[i] == c) return i; 00079 if(s[i] == '\0') break; 00080 if(dkcmIsSJIS1(s[i]) && dkcmIsSJIS2(s[i + 1])) i++; 00081 } 00082 return -1; 00083 }
|
|
複数の文字定数を検索指定できるdkcSJIS_StrChrSearch() /
dkcString.c の 118 行で定義されています。 参照先 dkcmIsSJIS1, と dkcmIsSJIS2. 00119 { 00120 // c == 0 も考慮している 00121 size_t i,j; 00122 size_t len = strlen(c); 00123 for(i = 0; ; i++){ 00124 if(s[i] == '\0') break; 00125 if(dkcmIsSJIS1(s[i]) && dkcmIsSJIS2(s[i + 1])){ 00126 i++; 00127 continue; 00128 } 00129 for(j=0;j<len;j++){ 00130 if(s[i] == c[j]) return i; 00131 } 00132 } 00133 return -1; 00134 }
|
|
dkcString.c の 136 行で定義されています。 参照先 dkcmIsSJIS1, と dkcmIsSJIS2. 参照元 dkcSJIS_SearchPathSepLast(). 00137 { 00138 int nLast = -1; 00139 size_t i,j; 00140 size_t len = strlen(c); 00141 // c == 0 も考慮している 00142 for(i = 0; ; i++){ 00143 if(s[i] == '\0') break; 00144 if(dkcmIsSJIS1(s[i]) && dkcmIsSJIS2(s[i + 1])){ 00145 i++; 00146 continue; 00147 } 00148 for(j=0;j<len;j++){ 00149 if(s[i] == c[j]) nLast = i; 00150 } 00151 } 00152 return nLast; 00153 }
|
|
SJIS文字を除外して文字を検索
dkcString.c の 86 行で定義されています。 参照先 dkcmIsSJIS1, と dkcmIsSJIS2. 参照元 dkcPathStringGetFileExtension(). 00087 { 00088 int nLast = -1,i; 00089 // c == 0 も考慮している 00090 for(i = 0; ; i++){ 00091 if(s[i] == c) nLast = i; 00092 if(s[i] == '\0') break; 00093 if(dkcmIsSJIS1(s[i]) && dkcmIsSJIS2(s[i + 1])) i++; 00094 } 00095 return nLast; 00096 }
|
|
SJIS文字を除外して文字を後ろから検索
dkcString.c の 98 行で定義されています。 参照先 dkcmIsSJIS1, と dkcmIsSJIS2. 参照元 dkcPathStringGetDirectory(). 00098 { 00099 int i; 00100 for(i=len;i > 0;i--){//sjisを調べるためi > 0 iが0になったら終了。 00101 if(dkcmIsSJIS1(s[i - 1]) && dkcmIsSJIS2(s[i]) ) 00102 { 00103 i--; 00104 continue; 00105 } 00106 if(s[i] == c) return i; 00107 } 00108 //iが0の時。 00109 if(! (dkcmIsSJIS1(s[i]) && dkcmIsSJIS2(s[i + 1]) )) 00110 { 00111 if(c==s[i]){ 00112 return 0; 00113 } 00114 } 00115 return -1; 00116 }
|
|
http://www.google.com/search?num=50&hl=ja&lr=lang_ja&q=strcat+cat%82%c6%82%cd
dkcString.c の 273 行で定義されています。 参照先 dkcMemoryStreamDynamicWrite(), dkcmNOT_ASSERT, dkc_String::mByteSize, dkc_MemoryStream::mNowOffset, dkc_String::mStream, と NULL. 参照元 dkcPathStringNormalizeConcatenateLogic(), と dkcStringInsert(). 00273 { 00274 dkcmNOT_ASSERT(NULL==ptr || NULL==ptr->mStream || 0==size); 00275 00276 if(0 != ptr->mByteSize){ 00277 ptr->mStream->mNowOffset --;//一つ減らしてNULL文字分を潰す。 00278 } 00279 if(DKUTIL_FAILED(dkcMemoryStreamDynamicWrite(ptr->mStream,str,size + 1)))//+1してNULL文字もコピー 00280 { 00281 return edk_FAILED; 00282 } 00283 00284 ptr->mByteSize += size; 00285 00286 return edk_SUCCEEDED; 00287 }
|
|
dkcString.c の 252 行で定義されています。 参照先 dkcMemoryStreamClear(), dkcMemoryStreamDynamicWrite(), dkcMemoryStreamSeek(), dkcmNOT_ASSERT, edkcMemoryStreamSeekSet, dkc_String::mByteSize, dkc_String::mStream, と NULL. 参照元 dkcPathStringCopy(). 00253 { 00254 dkcmNOT_ASSERT(NULL==ptr || NULL==ptr->mStream || 0==size); 00255 00256 if(DKUTIL_FAILED(dkcMemoryStreamSeek(ptr->mStream,0,edkcMemoryStreamSeekSet))){ 00257 return edk_FAILED; 00258 } 00259 00260 dkcMemoryStreamClear(ptr->mStream); 00261 00262 if(DKUTIL_FAILED(dkcMemoryStreamDynamicWrite(ptr->mStream,str, 00263 size + 1/* + 1してNULL文字分もコピー*/))) 00264 { 00265 return edk_FAILED; 00266 } 00267 00268 ptr->mByteSize = size; 00269 00270 return edk_SUCCEEDED; 00271 }
|
|
dkcString.c の 334 行で定義されています。 参照先 dkc_stream_swap(), dkcMemoryStreamSeek(), edkcMemoryStreamSeekSet, dkc_MemoryStream::mBuffer, dkc_String::mByteSize, dkc_MemoryStream::mNowOffset, と dkc_String::mStream. 参照元 dkcPathStringElementErase_Logic(), と dkcStringReplace(). 00335 { 00336 char *tp; 00337 size_t size; 00338 int r; 00339 00340 tp = (char *)ptr->mStream->mBuffer; 00341 size = ptr->mStream->mNowOffset; 00342 if(point + len >= size){ 00343 len = size - len; 00344 dkcMemoryStreamSeek(ptr->mStream,len,edkcMemoryStreamSeekSet); 00345 00346 return edk_Not_Satisfactory; 00347 } 00348 else 00349 { 00350 dkc_stream_swap(&tp[point],size - point - 1,len);//要らない領域を後ろに持ってくる。 00351 00352 ptr->mByteSize -= len;//少なくする。 00353 //多分バッファオーバーフローしないと思うけど・・・。 00354 ptr->mStream->mBuffer[ptr->mByteSize] = '\0'; 00355 00356 00357 r = dkcMemoryStreamSeek(ptr->mStream,size - len,edkcMemoryStreamSeekSet); 00358 } 00359 return r; 00360 }
|
|
DKC_STRINGの内部文字列をバッファにぶち込む
dkcString.c の 385 行で定義されています。 参照先 dkc_memcpy(), dkcStringNum(), dkc_MemoryStream::mBuffer, dkc_MemoryStream::mNowOffset, dkc_String::mStream, と NULL. 00386 { 00387 int r; 00388 size_t num; 00389 if(NULL==ptr) return edk_FAILED; 00390 num = dkcStringNum(ptr); 00391 r = dkc_memcpy(buffer,buffsize,ptr->mStream->mBuffer,ptr->mStream->mNowOffset); 00392 if(DKUTIL_FAILED(r)) return r; 00393 00394 return r; 00395 //return dkcStreamToBuffer(ptr->mStream,edkcStreamSeekSet,0,num,buffer,buffsize); 00396 }
|
|
dkcString.c の 289 行で定義されています。 参照先 dkc_stream_swap(), dkcMemoryStreamGetSeekPoint(), dkcmNOT_ASSERT, dkcStringConcatenate(), dkc_MemoryStream::mBuffer, dkc_String::mStream, と NULL. 参照元 dkcPathStringElementInsert_Logic(), と dkcStringReplace(). 00290 { 00291 size_t tpo;//一時オフセット保存 00292 char *tp;//bufferのtemp 00293 //char *mlctp;//mallocで確保したバッファのtemp 00294 //size_t len;//tpo - point 00295 //size_t maxbuffsize;//ptr->mStream->mSize - len 00296 00297 dkcmNOT_ASSERT(NULL==ptr || NULL==ptr->mStream); 00298 if(0==size){ 00299 return edk_Not_Satisfactory; 00300 } 00301 //lock thread 00302 00303 //ここらへんがステートマシンだから嫌^^; 00304 00305 00306 00307 //エラーチェック 00308 { 00309 tpo = dkcMemoryStreamGetSeekPoint(ptr->mStream); 00310 if(point > tpo) 00311 {//pointがはみ出ている。 00312 return edk_ArgumentException; 00313 } 00314 //とりあえず、push!! 00315 dkcStringConcatenate(ptr,str,size);//これでmByteSizeは+=されている。 00316 00317 tp = (char *)ptr->mStream->mBuffer; 00318 00319 //一度、Concatenateしたので再取得 00320 tpo = dkcMemoryStreamGetSeekPoint(ptr->mStream); 00321 00322 //入れ替えしてやる。 00323 dkc_stream_swap(&tp[point],tpo - point - 1,tpo - point - size - 1); 00324 00325 } 00326 return edk_SUCCEEDED; 00327 00328 //unlock thread 00329 00330 00331 00332 }
|
|
dkcString.c の 376 行で定義されています。 参照元 dkcStringGetBuffer(). 00376 { 00377 return ptr->mByteSize; 00378 }
|
|
dkcString.c の 380 行で定義されています。 参照先 dkc_MemoryStream::mBuffer, と dkc_String::mStream. 参照元 dkcPathStringGetDirectory(), dkcPathStringGetDrive(), dkcPathStringGetFileExtension(), dkcPathStringGetFileName(), と dkcPathStringPointer(). 00380 { 00381 //if(dkcErrorPtrCheck(ptr)) return edk_FAILED; 00382 return (const char *)ptr->mStream->mBuffer; 00383 }
|
|
dkcString.c の 362 行で定義されています。 参照先 dkcStringErase(), と dkcStringInsert(). 参照元 dkcPathStringElementReplace_Logic(). 00364 { 00365 //非効率だけどこれで^^;;;; 00366 dkcStringErase(ptr,begin_,end_ - begin_); 00367 return dkcStringInsert(ptr,begin_,str,size); 00368 }
|
|
dkcString.c の 372 行で定義されています。 参照元 dkcPathStringDevideNext_Logic(), dkcPathStringGetDirectory(), dkcPathStringGetFileExtension(), dkcPathStringGetFileName(), と dkcPathStringSize(). 00372 { 00373 return ptr->mByteSize; 00374 }
|
|
strstrのWrapper
dkcString.c の 168 行で定義されています。 参照先 NULL. 00169 { 00170 char *p = strstr(dest,src); 00171 if(NULL==p) return -1; 00172 if((size_t)p - (size_t)dest > INT_MAX){ 00173 return -2; 00174 } 00175 return (int)(p - dest); 00176 /*int offset = p - dest;//overflowすると危ない 00177 if(offset < 0) return -1; 00178 return offset; 00179 */ 00180 }
|