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 //------------------------------------------------------------------------------