メインページ | 構成 | ファイル一覧 | 構成メンバ | ファイルメンバ | 関連ページ

dkcString.h

文字列処理 [詳細]

#include "dkcDefined.h"
#include "dkcOSIndependent.h"
#include "dkcMemoryStream.h"

dkcString.hのインクルード依存関係図

Include dependency graph

このグラフは、どのファイルから直接、間接的にインクルードされているかを示しています。

Included by dependency graph

ソースコードを見る。

構成

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)/*((c ^= 0x20) && (c >= (SJIS1_S1 ^ 0x20) && c <= (SJIS1_E2 ^ 0x20)))*/
 dkcIsSJIS1()

#define dkcmIsSJIS2(c)   dkcIsSJIS2(c)/*(c >= SJIS2_S1 && c <= SJIS2_E1) || (c >= SJIS2_S2 && c <= SJIS2_E2)*/
 dkcIsSJIS2()


型定義

typedef dkc_String DKC_STRING

列挙型

enum  edkcString { edkcCHARString = 1, edkcWCHARString }

関数

DKC_EXTERN BOOL dkcIsSJIS1 (BYTE c)
 cがSJISの1バイト目の時TRUE(1)

DKC_EXTERN BOOL dkcIsSJIS2 (BYTE c)
 cがSJISの2バイト目の時TRUE(1)

DKC_EXTERN BOOL dkcIsSpace (BYTE c)
 半角全角を区別なしにSpace系の文字だったらTRUE

DKC_EXTERN const char * dkcGetSpaceSeparator ()
 可視できる文字定数だったらTRUE

DKC_EXTERN int WINAPI dkcSJIS_StrChrSearch (const char *s, char c)
 SJIS文字を除外して文字を検索 最初に見つかった位置を返す -1なら見つからない.

DKC_EXTERN int WINAPI dkcSJIS_StrChrSearchLast (const char *s, char c)
 SJIS文字を除外して文字を検索 最後に見つかった位置を返す -1なら見つからない.

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)
 It has not tested.

DKC_EXTERN int WINAPI dkcSJIS_SearchPathSep (const char *s)
 パスセパレータが最初に見つかった位置を返す。 -1は見つからない

DKC_EXTERN int WINAPI dkcSJIS_SearchPathSepLast (const char *s)
 パスセパレータが最期に見つかった位置を返す。 -1は見つからない

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)
 文字列の文字数を返す。内部streamをstrlenにかけたものを保存しておいたものを取得。

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の内部文字列をバッファにぶち込む.

DKC_EXTERN int WINAPI dkcStringSerialize (const DKC_STRING *ptr, DKC_SERIALIZE *)
 It has not tested.

DKC_EXTERN DKC_STRING *WINAPI dkcAllocStringDeserialize (DKC_DESERIALIZE *se)
 it has not tested.


説明

文字列処理

d金魚

から:
2004/2/28
覚え書き:
SYN氏のHPより。http://www.emit.jp/・JISの文字列の検索のコードを頂きました。 この場をお借りしてお礼申し上げます。m(_ _)m

SHIFT-JIS(以下 SJIS)

dkcString.h で定義されています。


マクロ定義

#define DBL_MAX_STR   "179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.000000"
 

doubleが最大のときの文字列

dkcString.h75 行で定義されています。

#define DBL_MAX_STR_LEN   316
 

doubleが最大のときの桁数(文字列の)

dkcString.h77 行で定義されています。

#define DBL_MIN_STR   "0.000000"
 

doubleが最小のときの文字列

dkcString.h80 行で定義されています。

#define DBL_MIN_STR_LEN   8
 

doubleが最小のときも桁数(文字列の)

dkcString.h82 行で定義されています。

#define dkcmIsSJIS1  )     dkcIsSJIS1(c)/*((c ^= 0x20) && (c >= (SJIS1_S1 ^ 0x20) && c <= (SJIS1_E2 ^ 0x20)))*/
 

dkcIsSJIS1()

dkcString.h97 行で定義されています。

参照元 dkcCreateDirectory(), dkcSJIS_StrChrSearch(), dkcSJIS_StrChrSearchInStr(), dkcSJIS_StrChrSearchInStrLast(), dkcSJIS_StrChrSearchLast(), と dkcSJIS_StrChrSearchTail().

#define dkcmIsSJIS2  )     dkcIsSJIS2(c)/*(c >= SJIS2_S1 && c <= SJIS2_E1) || (c >= SJIS2_S2 && c <= SJIS2_E2)*/
 

dkcIsSJIS2()

dkcString.h100 行で定義されています。

参照元 dkcCreateDirectory(), dkcSJIS_StrChrSearch(), dkcSJIS_StrChrSearchInStr(), dkcSJIS_StrChrSearchInStrLast(), dkcSJIS_StrChrSearchLast(), と dkcSJIS_StrChrSearchTail().

#define INT_MAX_STR   "2147483647"
 

(signed) int の最大値の文字列

dkcString.h42 行で定義されています。

#define INT_MAX_STR_LEN   10
 

dkcString.h44 行で定義されています。

#define INT_MIN_STR   "-2147483648"
 

INT_MINの文字列.

dkcString.h52 行で定義されています。

#define INT_MIN_STR_LEN   11
 

dkcString.h55 行で定義されています。

#define LONGLONG_MAX_STR   "9223372036854775807"
 

dkcString.h62 行で定義されています。

#define LONGLONG_MAX_STR_LEN   19
 

dkcString.h64 行で定義されています。

#define LONGLONG_MIN_STR   "-9223372036854775808"
 

dkcString.h66 行で定義されています。

#define LONGLONG_MIN_STR_LEN   20
 

dkcString.h68 行で定義されています。

#define SHRT_MAX_STR   "32767"
 

(signed) short の最大値 の文字列

dkcString.h32 行で定義されています。

#define SHRT_MAX_STR_LEN   5
 

dkcString.h34 行で定義されています。

#define SHRT_MIN_STR   "-32768"
 

(signed) short の最小値 の文字列

dkcString.h37 行で定義されています。

#define SHRT_MIN_STR_LEN   6
 

dkcString.h39 行で定義されています。

#define UCHAR_MAX_STR   "255"
 

dkcString.h22 行で定義されています。

#define UCHAR_MAX_STR_LEN   3
 

unsigned char のMAX時の文字列の長さ(NULL文字無し)

dkcString.h24 行で定義されています。

#define UINT_MAX_STR   "4294967295"
 

(0xffffffff) unsigned int の最大値の文字列

dkcString.h47 行で定義されています。

#define UINT_MAX_STR_LEN   10
 

dkcString.h49 行で定義されています。

#define ULONG_MAX_STR   "4294967295"
 

(0xffffffff) unsigned int の最大値 の文字列

dkcString.h58 行で定義されています。

#define ULONG_MAX_STR_LEN   10
 

dkcString.h60 行で定義されています。

#define ULONGLONG_MAX_STR   "18446744073709551615"
 

dkcString.h70 行で定義されています。

#define ULONGLONG_MAX_STR_LEN   20
 

dkcString.h72 行で定義されています。

#define USHRT_MAX_STR   "65535"
 

dkcString.h27 行で定義されています。

#define USHRT_MAX_STR_LEN   5
 

dkcString.h29 行で定義されています。


型定義

typedef struct dkc_String DKC_STRING
 

文字列を格納する構造体(C++のSTLのstd::stringみたいなもの)

参照元 dkcAllocString(), dkcAllocStringDeserialize(), dkcFreeString(), dkcPathStringNormalizeCopyLogic(), dkcStringConcatenate(), dkcStringCopy(), dkcStringErase(), dkcStringGetBuffer(), dkcStringInsert(), dkcStringNum(), dkcStringPointer(), dkcStringReplace(), dkcStringSerialize(), と dkcStringSize().


列挙型

enum edkcString
 

列挙型の値:
edkcCHARString 
edkcWCHARString 

dkcString.h104 行で定義されています。

00109                          {


関数

DKC_EXTERN DKC_STRING* WINAPI dkcAllocString size_t  size  ) 
 

dkcString.c222 行で定義されています。

参照先 DKC_STRING, dkcAllocate(), dkcAllocMemoryStream(), dkcFree(), dkc_String::mByteSize, dkc_String::mStream, と NULL.

参照元 dkcAllocDeserialize(), dkcAllocPathString(), dkcAllocSerialize(), と dkcAllocStringDeserialize().

00222                                                {
00223     DKC_STRING *p;
00224     //へんな引数は除外
00225     //if(dkcErrorFlagCheck(flag)) return edk_ArgumentException;
00226     
00227     p = (DKC_STRING *)dkcAllocate(sizeof(DKC_STRING));
00228     if(NULL==p) return NULL;
00229     
00230     p->mStream = dkcAllocMemoryStream(size + 1);
00231     if(NULL==p->mStream) goto Error;
00232 
00233     p->mByteSize = 0;
00234 
00235     return p;
00236 Error:
00237     dkcFree((void **)&p);
00238     return NULL;
00239 }

DKC_EXTERN DKC_STRING* WINAPI dkcAllocStringDeserialize DKC_DESERIALIZE se  ) 
 

it has not tested.

dkcString.c405 行で定義されています。

参照先 DKC_DESERIALIZE, DKC_MEMORYSTREAM, DKC_STRING, dkcAllocMemoryStreamDeserialize(), dkcAllocString(), dkcDeserializeRead(), dkcFreeMemoryStream(), edkcSerializeIDString, dkc_String::mByteSize, dkc_String::mStream, と NULL.

00406 {
00407     DKC_STRING *p;
00408     DKC_STRING t;
00409     DKC_MEMORYSTREAM *mem;
00410     size_t read;
00411     int id;
00412     
00413     dkcDeserializeRead(se,&id,sizeof(id),&read);
00414     if(id !=  edkcSerializeIDString)
00415     {
00416         return NULL;
00417     }
00418 
00419     mem = dkcAllocMemoryStreamDeserialize(se);
00420     if(NULL==mem){
00421         return NULL;
00422         }
00423 
00424     dkcDeserializeRead(se,&t,sizeof(t),&read);
00425 
00426     p = dkcAllocString(0);
00427     if(NULL==p){
00428         return NULL;
00429         }
00430     
00431     dkcFreeMemoryStream(&p->mStream);
00432     p->mByteSize = t.mByteSize;
00433     p->mStream = mem;
00434 
00435     //dkcmNOT_ASSERT(read != p->mSize);
00436     
00437     return p;
00438 
00439 }

DKC_EXTERN int WINAPI dkcBMStrStr const char *  dest,
const char *  src
 

strstrをBM法でやってみたもの

戻り値:
最初に見つかった位置を返す -1なら見つからない /
覚え書き:
It has not tested.

dkcString.c213 行で定義されています。

参照先 dkcBMStrStrLogic().

00214 {
00215     return dkcBMStrStrLogic(dest,src);
00216 }

DKC_EXTERN int WINAPI dkcFreeString DKC_STRING **  ptr  ) 
 

dkcString.c241 行で定義されています。

参照先 DKC_STRING, dkcFree(), dkcFreeMemoryStream(), edk_ArgumentException, と NULL.

参照元 dkcAllocDeserialize(), dkcAllocPathString(), dkcAllocSerialize(), dkcFreeDeserialize(), dkcFreePathString(), と dkcFreeSerialize().

00241                                           {
00242     //変な引数入れるな!
00243     if(NULL==ptr || NULL==*ptr || NULL==(*ptr)->mStream){return edk_ArgumentException;}
00244     dkcFreeMemoryStream(&(*ptr)->mStream);
00245     return dkcFree(ptr);
00246 }

DKC_EXTERN const char* dkcGetSpaceSeparator  ) 
 

可視できる文字定数だったらTRUE

dkcString.c65 行で定義されています。

00065                                   {
00066     static const char temp[]={
00067         '\0',0x0a,0x0d,' ','\t'
00068     };
00069     return temp;
00070 }

DKC_EXTERN BOOL dkcIsSJIS1 BYTE  c  ) 
 

cがSJISの1バイト目の時TRUE(1)

dkcString.c40 行で定義されています。

参照先 BOOL, BYTE, SJIS1_E2, と SJIS1_S1.

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 }

DKC_EXTERN BOOL dkcIsSJIS2 BYTE  c  ) 
 

cがSJISの2バイト目の時TRUE(1)

dkcString.c52 行で定義されています。

参照先 BOOL, BYTE, 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 }

DKC_EXTERN BOOL dkcIsSpace BYTE  c  ) 
 

半角全角を区別なしにSpace系の文字だったらTRUE

dkcString.c60 行で定義されています。

参照先 BOOL, と BYTE.

00061 {
00062     return (c=='\0' || c==0x0a || c==0x0d || c==' ' || c=='\t');
00063 }

DKC_EXTERN int WINAPI dkcSJIS_SearchPathSep const char *  s  ) 
 

パスセパレータが最初に見つかった位置を返す。 -1は見つからない

dkcString.c155 行で定義されています。

参照先 dkcGetPathSep(), と dkcSJIS_StrChrSearchInStr().

参照元 dkcPathStringElementErase_Logic(), dkcPathStringElementReplace_Logic(), と dkcPathStringGetFileExtension().

00156 {
00157     const char *target = dkcGetPathSep();
00158     return dkcSJIS_StrChrSearchInStr(s,target);
00159 }

DKC_EXTERN int WINAPI dkcSJIS_SearchPathSepLast const char *  s  ) 
 

パスセパレータが最期に見つかった位置を返す。 -1は見つからない

dkcString.c161 行で定義されています。

参照先 dkcGetPathSep(), と dkcSJIS_StrChrSearchInStrLast().

参照元 dkcIsTailPathSep().

00162 {
00163     const char *target = dkcGetPathSep();
00164     return dkcSJIS_StrChrSearchInStrLast(s,target);
00165 }

DKC_EXTERN int WINAPI dkcSJIS_StrChrSearch const char *  s,
char  c
 

SJIS文字を除外して文字を検索 最初に見つかった位置を返す -1なら見つからない.

dkcString.c73 行で定義されています。

参照先 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 } 

DKC_EXTERN int WINAPI dkcSJIS_StrChrSearchInStr const char *  s,
const char *  c
 

複数の文字定数を検索指定できるdkcSJIS_StrChrSearch() /

覚え書き:
It has not tested.

dkcString.c118 行で定義されています。

参照先 dkcmIsSJIS1, と dkcmIsSJIS2.

参照元 dkcSJIS_SearchPathSep().

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 }

DKC_EXTERN int WINAPI dkcSJIS_StrChrSearchInStrLast const char *  s,
const char *  c
 

It has not tested.

dkcString.c136 行で定義されています。

参照先 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 } 

DKC_EXTERN int WINAPI dkcSJIS_StrChrSearchLast const char *  s,
char  c
 

SJIS文字を除外して文字を検索 最後に見つかった位置を返す -1なら見つからない.

dkcString.c86 行で定義されています。

参照先 dkcmIsSJIS1, と dkcmIsSJIS2.

参照元 dkcPathStringGetFileExtension(), と dkcPathStringGetFileName().

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 } 

DKC_EXTERN int WINAPI dkcSJIS_StrChrSearchTail const char *  s,
size_t  len,
char  c
 

SJIS文字を除外して文字を後ろから検索

戻り値:
後ろから検索して最初に見つかった位置を返す -1なら見つからない
覚え書き:
It has not tested.

dkcString.c98 行で定義されています。

参照先 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 }

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

dkcString.c270 行で定義されています。

参照先 DKC_STRING, dkcMemoryStreamDynamicWrite(), dkcmNOT_ASSERT, DKUTIL_FAILED, edk_FAILED, edk_SUCCEEDED, dkc_String::mByteSize, dkc_MemoryStream::mNowOffset, dkc_String::mStream, と NULL.

参照元 dkcPathStringNormalizeConcatenateLogic(), と dkcStringInsert().

00270                                                                             {
00271     dkcmNOT_ASSERT(NULL==ptr  || NULL==ptr->mStream || 0==size);
00272 
00273     if(0 != ptr->mByteSize){
00274         ptr->mStream->mNowOffset --;//一つ減らしてNULL文字分を潰す。
00275     }
00276     if(DKUTIL_FAILED(dkcMemoryStreamDynamicWrite(ptr->mStream,str,size + 1)))//+1してNULL文字もコピー
00277     {
00278         return edk_FAILED;
00279     }
00280 
00281     ptr->mByteSize += size;
00282 
00283     return edk_SUCCEEDED;
00284 }

DKC_EXTERN int WINAPI dkcStringCopy DKC_STRING ptr,
const char *  str,
size_t  size
 

dkcString.c249 行で定義されています。

参照先 DKC_STRING, dkcMemoryStreamClear(), dkcMemoryStreamDynamicWrite(), dkcMemoryStreamSeek(), dkcmNOT_ASSERT, DKUTIL_FAILED, edk_FAILED, edk_SUCCEEDED, edkcMemoryStreamSeekSet, dkc_String::mByteSize, dkc_String::mStream, と NULL.

参照元 dkcAllocDeserialize(), dkcAllocSerialize(), と dkcPathStringCopy().

00250 {
00251     dkcmNOT_ASSERT(NULL==ptr  || NULL==ptr->mStream || 0==size);
00252 
00253     if(DKUTIL_FAILED(dkcMemoryStreamSeek(ptr->mStream,0,edkcMemoryStreamSeekSet))){
00254         return edk_FAILED;
00255     }
00256 
00257     dkcMemoryStreamClear(ptr->mStream);
00258     
00259     if(DKUTIL_FAILED(dkcMemoryStreamDynamicWrite(ptr->mStream,str,
00260         size + 1/* + 1してNULL文字分もコピー*/)))
00261     {
00262         return edk_FAILED;
00263     }
00264 
00265     ptr->mByteSize = size;
00266 
00267     return edk_SUCCEEDED;
00268 }

DKC_EXTERN int WINAPI dkcStringErase DKC_STRING ptr,
size_t  point,
size_t  len
 

引数:
ptr[in][out] dkcAllocString()で確保したポインタ
point[in] 何文字目以降を削除するのか
len[in] pointから何文字Eraseするか。
戻り値:
edk_SUCCEEDEDなら完全成功。
edk_Not_Satisfactoryならlenが大きすぎる等の理由から一応処理は出来たが要求した結果にはならなかった。
その他はエラー
TODO:
test

dkcString.c331 行で定義されています。

参照先 dkc_stream_swap(), DKC_STRING, dkcMemoryStreamSeek(), edk_Not_Satisfactory, edkcMemoryStreamSeekSet, dkc_MemoryStream::mBuffer, dkc_String::mByteSize, dkc_MemoryStream::mNowOffset, と dkc_String::mStream.

参照元 dkcPathStringElementErase_Logic(), と dkcStringReplace().

00332 {
00333     char *tp;
00334     size_t size;
00335     int r;
00336 
00337     tp = (char *)ptr->mStream->mBuffer;
00338     size = ptr->mStream->mNowOffset;
00339     if(point + len >= size){
00340         len = size - len;
00341         dkcMemoryStreamSeek(ptr->mStream,len,edkcMemoryStreamSeekSet);
00342 
00343         return edk_Not_Satisfactory;
00344     }
00345     else
00346     {
00347         dkc_stream_swap(&tp[point],size - point - 1,len);//要らない領域を後ろに持ってくる。
00348     
00349         ptr->mByteSize -= len;//少なくする。
00350         //多分バッファオーバーフローしないと思うけど・・・。
00351         ptr->mStream->mBuffer[ptr->mByteSize] = '\0';
00352         
00353     
00354         r = dkcMemoryStreamSeek(ptr->mStream,size - len,edkcMemoryStreamSeekSet);
00355     }
00356     return r;
00357 }

DKC_EXTERN int WINAPI dkcStringGetBuffer const DKC_STRING ptr,
char *  buffer,
size_t  buffsize
 

DKC_STRINGの内部文字列をバッファにぶち込む.

dkcString.c382 行で定義されています。

参照先 dkc_memcpy(), DKC_STRING, dkcStringNum(), DKUTIL_FAILED, edk_FAILED, dkc_MemoryStream::mBuffer, dkc_MemoryStream::mNowOffset, dkc_String::mStream, と NULL.

00383 {
00384     int r;
00385     size_t num;
00386     if(NULL==ptr) return edk_FAILED;
00387     num = dkcStringNum(ptr);
00388     r = dkc_memcpy(buffer,buffsize,ptr->mStream->mBuffer,ptr->mStream->mNowOffset);
00389     if(DKUTIL_FAILED(r)) return r;
00390     
00391     return r;
00392     //return dkcStreamToBuffer(ptr->mStream,edkcStreamSeekSet,0,num,buffer,buffsize);
00393 }

DKC_EXTERN int WINAPI dkcStringInsert DKC_STRING ptr,
size_t  point,
const char *  str,
size_t  size
 

引数:
ptr[in][out] dkcAllocString()で確保したポインタ
point[in] 何文字目以降に挿入するのか
str[in] 挿入したい文字列
size[in] strの文字数。
TODO:
テストをする。この関数の実装は醜いので直す。

dkcString.c286 行で定義されています。

参照先 dkc_stream_swap(), DKC_STRING, dkcMemoryStreamGetSeekPoint(), dkcmNOT_ASSERT, dkcStringConcatenate(), edk_ArgumentException, edk_Not_Satisfactory, edk_SUCCEEDED, dkc_MemoryStream::mBuffer, dkc_String::mStream, と NULL.

参照元 dkcPathStringElementInsert_Logic(), と dkcStringReplace().

00287 {
00288     size_t tpo;//一時オフセット保存
00289     char *tp;//bufferのtemp
00290     //char *mlctp;//mallocで確保したバッファのtemp
00291     //size_t len;//tpo - point
00292     //size_t maxbuffsize;//ptr->mStream->mSize - len
00293 
00294     dkcmNOT_ASSERT(NULL==ptr  || NULL==ptr->mStream);
00295     if(0==size){
00296         return edk_Not_Satisfactory;
00297     }
00298     //lock thread
00299 
00300     //ここらへんがステートマシンだから嫌^^;
00301 
00302 
00303 
00304     //エラーチェック
00305     {
00306         tpo = dkcMemoryStreamGetSeekPoint(ptr->mStream);
00307         if(point > tpo)
00308         {//pointがはみ出ている。
00309             return edk_ArgumentException;
00310         }
00311         //とりあえず、push!!
00312         dkcStringConcatenate(ptr,str,size);//これでmByteSizeは+=されている。
00313 
00314         tp = (char *)ptr->mStream->mBuffer;
00315 
00316         //一度、Concatenateしたので再取得
00317         tpo = dkcMemoryStreamGetSeekPoint(ptr->mStream);
00318 
00319         //入れ替えしてやる。
00320         dkc_stream_swap(&tp[point],tpo - point - 1,tpo - point - size - 1);
00321 
00322     }
00323     return edk_SUCCEEDED;
00324         
00325     //unlock thread
00326 
00327 
00328 
00329 }

DKC_EXTERN size_t dkcStringNum const DKC_STRING ptr  ) 
 

文字列の文字数を返す。内部streamをstrlenにかけたものを保存しておいたものを取得。

dkcString.c373 行で定義されています。

参照先 DKC_STRING, と dkc_String::mByteSize.

参照元 dkcStringGetBuffer().

00373                                           {
00374     return ptr->mByteSize;
00375 }

DKC_EXTERN const char* WINAPI dkcStringPointer const DKC_STRING ptr  ) 
 

dkcString.c377 行で定義されています。

参照先 DKC_STRING, dkc_MemoryStream::mBuffer, と dkc_String::mStream.

参照元 dkcFreeSerialize(), dkcPathStringGetDirectory(), dkcPathStringGetDrive(), dkcPathStringGetFileExtension(), dkcPathStringGetFileName(), と dkcPathStringPointer().

00377                                                            {
00378     //if(dkcErrorPtrCheck(ptr)) return edk_FAILED;
00379     return (const char *)ptr->mStream->mBuffer;
00380 }

DKC_EXTERN int WINAPI dkcStringReplace DKC_STRING ptr,
size_t  begin_,
size_t  end_,
const char *  str,
size_t  size
 

引数:
ptr[in][out] dkcAllocString()で確保したポインタ
begin_[in] 何処から(何文字目から
end_[in] 何処まで(何文字目まで)注意:begin_からn byteまで とかではない。
str[in] 置換したい文字列
size[in] strの文字数。
TODO:
テストをする。この関数の実装は醜いので直す。

dkcString.c359 行で定義されています。

参照先 DKC_STRING, dkcStringErase(), と dkcStringInsert().

参照元 dkcPathStringElementReplace_Logic().

00361 {
00362     //非効率だけどこれで^^;;;;
00363     dkcStringErase(ptr,begin_,end_ - begin_);
00364     return dkcStringInsert(ptr,begin_,str,size);
00365 }

DKC_EXTERN int WINAPI dkcStringSerialize const DKC_STRING ptr,
DKC_SERIALIZE
 

It has not tested.

dkcString.c396 行で定義されています。

参照先 DKC_SERIALIZE, DKC_STRING, dkcMemoryStreamSerialize(), dkcmNOT_ASSERT, dkcSerializeWrite(), edkcSerializeIDString, と NULL.

00397 {
00398     int id = edkcSerializeIDString;
00399     dkcmNOT_ASSERT(NULL==ptr);
00400     dkcSerializeWrite(se,&id,sizeof(id));
00401     dkcMemoryStreamSerialize(ptr->mStream,se);
00402     return dkcSerializeWrite(se,ptr,sizeof(DKC_STRING));
00403 }

DKC_EXTERN size_t dkcStringSize const DKC_STRING ptr  ) 
 

dkcString.c369 行で定義されています。

参照先 DKC_STRING, と dkc_String::mByteSize.

参照元 dkcPathStringDevideNext_Logic(), dkcPathStringGetDirectory(), dkcPathStringGetFileExtension(), dkcPathStringGetFileName(), と dkcPathStringSize().

00369                                            {
00370     return ptr->mByteSize;
00371 }

DKC_EXTERN int WINAPI dkcStrStr const char *  dest,
const char *  src
 

strstrのWrapper

戻り値:
最初に見つかった位置を返す -1なら見つからない

dkcString.c168 行で定義されています。

参照先 NULL.

00169 {
00170     char *p = strstr(dest,src);
00171     if(NULL==p) return -1;
00172     return (int)(p - dest);
00173     /*int offset = p - dest;//overflowすると危ない
00174     if(offset < 0) return -1;
00175     return offset;
00176     */
00177 }


dkutil_cに対してSun Jul 18 22:46:29 2004に生成されました。 doxygen 1.3.6