Artifact Content

Not logged in

Artifact db7b4a9cec9be918c149ed5885b08ebf86cfb9e0


     1  //--- K.I.LIB ---
     2  // kl_str.h : string classes for K.I.LIB
     3  
     4  #ifndef AFX_KISTR_H__1932CA2C_ACA6_4606_B57A_ACD0B7D1D35B__INCLUDED_
     5  #define AFX_KISTR_H__1932CA2C_ACA6_4606_B57A_ACD0B7D1D35B__INCLUDED_
     6  
     7  /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/
     8  // kiStr : 単純文字列
     9  
    10  class kiStr
    11  {
    12  friend void kilib_startUp();
    13  
    14  private: //-- グローバルな初期化処理など ---------------------
    15  
    16  	static void init();
    17  
    18  public: //-- 外向きインターフェイス --------------------------
    19  
    20  	// 2byte文字の処理を高速化(したような気分)
    21  	static char* next( char* p )
    22  		{ return p+st_lb[(*p)&0xff]; }
    23  	static const char* next( const char* p )
    24  		{ return p+st_lb[(*p)&0xff]; }
    25  	static bool isLeadByte( char c )
    26  		{ return st_lb[c&0xff]==2; }
    27  
    28  	// 初期化
    29  	kiStr( int start_size = 100 );
    30  	kiStr( const char* s, int min_size = 100 );
    31  	explicit kiStr( const kiStr& s );
    32  
    33  	// 演算子
    34  	kiStr& operator = ( const kiStr& );
    35  	kiStr& operator = ( const char* s );
    36  	kiStr& operator += ( const char* s );
    37  	kiStr& operator += ( char c );
    38  	bool operator == ( const char* s ) const;
    39  	bool isSame( const char* s )       const;
    40  	operator const char*()             const;
    41  	int len()                          const;
    42  	void lower()
    43  		{ ::CharLower(m_pBuf); }
    44  	void upper()
    45  		{ ::CharUpper(m_pBuf); }
    46  	kiStr& setInt( int n, bool cm=false );
    47  	void replaceToSlash() {
    48  		for(char* p=m_pBuf; *p; p=next(p))
    49  			if(*p=='\\')
    50  				*p='/';
    51  	}
    52  
    53  	// リソースからロード
    54  	kiStr& loadRsrc( UINT id );
    55  
    56  	kiStr& removeTrailWS();
    57  
    58  protected: //-- 派生クラス向け -----------------------------
    59  
    60  	char* m_pBuf;
    61  	int   m_ALen;
    62  
    63  private: //-- 内部処理 -------------------------------------
    64  
    65  	static char st_lb[256];
    66  
    67  public:
    68  
    69  	virtual ~kiStr();
    70  };
    71  
    72  inline const kiStr operator+(const kiStr& x, const kiStr& y)
    73  	{ return kiStr(x) += y; }
    74  inline const kiStr operator+(const char* x, const kiStr& y)
    75  	{ return kiStr(x) += y; }
    76  inline const kiStr operator+(const kiStr& x, const char* y)
    77  	{ return kiStr(x) += y; }
    78  
    79  /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/
    80  // kiPath : パス特有の処理用関数付き文字列
    81  
    82  class kiPath : public kiStr
    83  {
    84  public: //-- 外向きインターフェイス --------------------------
    85  
    86  	// 初期化
    87  	kiPath() : kiStr( MAX_PATH ){}
    88  	explicit kiPath( const char* s ) : kiStr( s, MAX_PATH ){}
    89  	explicit kiPath( const kiStr& s ) : kiStr( s, MAX_PATH ){}
    90  	explicit kiPath( const kiPath& s ) : kiStr( s, MAX_PATH ){}
    91  	kiPath( int nPATH, bool bs = true ) : kiStr( MAX_PATH )
    92  		{
    93  			beSpecialPath( nPATH );
    94  			if( nPATH != Exe_name )
    95  				beBackSlash( bs );
    96  		}
    97  
    98  	// operator
    99  	void operator = ( const char* s ){ kiStr::operator =(s); }
   100  
   101  	// 特殊パス取得
   102  	void beSpecialPath( int nPATH );
   103  	enum { Win=0x1787, Sys, Tmp, Prg, Exe, Cur, Exe_name,
   104  			Snd=CSIDL_SENDTO, Dsk=CSIDL_DESKTOP, Doc=CSIDL_PERSONAL };
   105  
   106  	// 短いパス
   107  	void beShortPath();
   108  
   109  	// 最後のバックスラッシュ制御
   110  	void beBackSlash( bool add );
   111  
   112  	// ディレクトリ名のみ
   113  	bool beDirOnly();
   114  	// ファイル名except拡張子全部
   115  	void getBody( kiStr& str ) const;
   116  	// ファイル名except拡張子一つ
   117  	void getBody_all( kiStr& str ) const;
   118  
   119  	// 複数階層mkdir
   120  	void mkdir();
   121  	// 複数階層rmdir
   122  	void remove();
   123  
   124  	// ドライブタイプ
   125  	UINT getDriveType() const;
   126  	// 同じディレクトリにあるかどうか
   127  	bool isInSameDir(const char* r) const;
   128  
   129  	// [static] ディレクトリ情報を含まない、ファイル名のみ抽出
   130  	static const char* name( const char* str );
   131  	// [static] 最後の拡張子。無ければNULL
   132  	static const char* ext( const char* str );
   133  	// [static] 拡張子全部。無ければNULL
   134  	static const char* ext_all( const char* str );
   135  	// [static] \ / で終わるか否か
   136  	static bool endwithyen( const char* str );
   137  
   138  	// non-static-ver
   139  	const char* name() const
   140  		{ return name(m_pBuf); }
   141  	const char* ext() const
   142  		{ return ext(m_pBuf); }
   143  	const char* ext_all() const
   144  		{ return ext_all(m_pBuf); }
   145  };
   146  
   147  #endif