Main Page | Namespace List | Class Hierarchy | Alphabetical List | Compound List | File List | Namespace Members | Compound Members | File Members

StringTokenizer.h

Go to the documentation of this file.
00001 //------------------------------------------------------------------------------
00002 // Lamp : Open source game middleware
00003 // Copyright (C) 2004  Junpei Ohtani ( Email : junpee@users.sourceforge.jp )
00004 //
00005 // This library is free software; you can redistribute it and/or
00006 // modify it under the terms of the GNU Lesser General Public
00007 // License as published by the Free Software Foundation; either
00008 // version 2.1 of the License, or (at your option) any later version.
00009 //
00010 // This library is distributed in the hope that it will be useful,
00011 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00012 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013 // Lesser General Public License for more details.
00014 //
00015 // You should have received a copy of the GNU Lesser General Public
00016 // License along with this library; if not, write to the Free Software
00017 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00018 //------------------------------------------------------------------------------
00019 
00020 /** @file
00021  * ストリングトークナイザヘッダ
00022  * @author Junpee
00023  */
00024 
00025 #ifndef STRING_TOKENIZER_H_
00026 #define STRING_TOKENIZER_H_
00027 
00028 namespace Lamp{
00029 
00030 //------------------------------------------------------------------------------
00031 /**
00032  * ストリングトークナイザ
00033  */
00034 class StringTokenizer{
00035 public:
00036     /**
00037      * コンストラクタ
00038      *
00039      * このコンストラクタを使用した場合、initialize()メソッドを呼ぶ必要があります。
00040      */
00041     explicit StringTokenizer();
00042      
00043     /**
00044      * コンストラクタ
00045      * @param target 解析される文字列
00046      */
00047     explicit StringTokenizer(const String& target){
00048         initialize(target);
00049     }
00050 
00051     /**
00052      * コンストラクタ
00053      *
00054      * このコンストラクタを使用した場合はStringTokenizerが破棄されるまで
00055      * 解析されるデータを変更しないで下さい。
00056      * @param target 解析されるデータ
00057      */
00058     explicit StringTokenizer(const char* target){
00059         initialize(target);
00060     }
00061 
00062     /**
00063      * コンストラクタ
00064      * @param target 解析される文字列
00065      * @param delimiter 区切り文字
00066      */
00067     StringTokenizer(const String& target, const String& delimiter){
00068         initialize(target, delimiter);
00069     }
00070 
00071     /**
00072      * コンストラクタ
00073      *
00074      * このコンストラクタを使用した場合はStringTokenizerが破棄されるまで
00075      * 解析されるデータを変更しないで下さい。
00076      * @param target 解析されるデータ
00077      * @param delimiter 区切り文字
00078      */
00079     StringTokenizer(const char* target, const String& delimiter){
00080         initialize(target, delimiter);
00081     }
00082 
00083     /**
00084      * コンストラクタ
00085      * @param target 解析される文字列
00086      * @param delimiter 区切り文字
00087      * @param delimiterOutput trueなら区切り文字をトークンとして出力
00088      */
00089     StringTokenizer(const String& target, const String& delimiter,
00090         bool delimiterOutput){
00091         initialize(target, delimiter, delimiterOutput);
00092     }
00093 
00094     /**
00095      * コンストラクタ
00096      *
00097      * このコンストラクタを使用した場合はStringTokenizerが破棄されるまで
00098      * 解析されるデータを変更しないで下さい。
00099      * @param target 解析されるデータ
00100      * @param delimiter 区切り文字
00101      * @param delimiterOutput trueなら区切り文字をトークンとして出力
00102      */
00103     StringTokenizer(const char* target,
00104         const String& delimiter, bool delimiterOutput){
00105         initialize(target, delimiter, delimiterOutput);
00106     }
00107 
00108     /**
00109      * 初期化
00110      * @param target 解析される文字列
00111      * @param delimiter 区切り文字
00112      * @param delimiterOutput trueなら区切り文字をトークンとして出力
00113      */
00114     void initialize(const char* target,
00115         const String& delimiter = defaultDelimiter,
00116         bool delimiterOutput = false);
00117 
00118     /**
00119      * 初期化
00120      * @param target 解析される文字列
00121      * @param delimiter 区切り文字
00122      * @param delimiterOutput trueなら区切り文字をトークンとして出力
00123      */
00124     void initialize(const String& target,
00125         const String& delimiter = defaultDelimiter,
00126         bool delimiterOutput = false);
00127 
00128     /**
00129      * デストラクタ
00130      */
00131     virtual ~StringTokenizer();
00132 
00133     /**
00134      * トークンがまだあるかどうか
00135      * @return trueならトークンがある。
00136      */
00137     virtual bool hasMoreTokens();
00138 
00139     /**
00140      * 次のトークン取得
00141      * @return 次のトークン
00142      */
00143     virtual String getNextToken();
00144 
00145     /**
00146      * トークンオフセットの取得
00147      * @return トークンオフセット
00148      */
00149     virtual int getTokenOffset() const{ return tokenOffset_; }
00150 
00151     /**
00152      * 現在のトークン取得
00153      * @return 現在のトークン
00154      */
00155     virtual String getNowToken() const{ return nowToken_; }
00156 
00157     /**
00158      * 一つ前のトークン取得
00159      * @return 一つ前のトークン
00160      */
00161     virtual String getPreviousToken() const{ return previousToken_; }
00162 
00163 private:
00164 
00165     // コピーコンストラクタの隠蔽
00166     StringTokenizer(const StringTokenizer& copy);
00167 
00168     // 代入コピーの隠蔽
00169     void operator =(const StringTokenizer& copy);
00170 
00171     // 対象文字列。文字列データの確保が目的。
00172     String targetString_;
00173     // ベースポインタ
00174     const char* base_;
00175     // カレントポインタ
00176     const char* current_;
00177     // トークンオフセット
00178     int tokenOffset_;
00179     // デリミタ
00180     String delimiter_;
00181     // 現在のトークン
00182     String nowToken_;
00183     // 一つ前のトークン
00184     String previousToken_;
00185     // デリミタ出力フラグ
00186     bool delimiterOutput_;
00187 
00188     // デフォルトデリミタ
00189     static const String defaultDelimiter;
00190 
00191 };
00192 
00193 //------------------------------------------------------------------------------
00194 } // End of namespace Lamp
00195 #endif // End of STRING_TOKENIZER_H_
00196 //------------------------------------------------------------------------------

Generated on Wed Mar 16 10:29:36 2005 for Lamp by doxygen 1.3.2