nlib
WordFilter.h
[詳解]
1 
2 /*--------------------------------------------------------------------------------*
3  Project: CrossRoad
4  Copyright (C)Nintendo All rights reserved.
5 
6  These coded instructions, statements, and computer programs contain proprietary
7  information of Nintendo and/or its licensed developers and are protected by
8  national and international copyright laws. They may not be disclosed to third
9  parties or copied or duplicated in any form, in whole or in part, without the
10  prior written consent of Nintendo.
11 
12  The content herein is highly confidential and should be handled accordingly.
13  *--------------------------------------------------------------------------------*/
14 
15 #pragma once
16 #ifndef INCLUDE_NN_NLIB_SUCCINCT_WORDFILTER_H_
17 #define INCLUDE_NN_NLIB_SUCCINCT_WORDFILTER_H_
18 
19 #include "nn/nlib/Swap.h"
21 
22 #if defined(_MSC_VER) && defined(nx_succinct_EXPORTS)
23 #undef NLIB_VIS_PUBLIC
24 #define NLIB_VIS_PUBLIC NLIB_WINEXPORT
25 #endif
26 
27 NLIB_NAMESPACE_BEGIN
28 namespace succinct {
29 
31  public:
32  typedef bool (*MatchCallback)(const char* first, const char* last, uint32_t nodeid,
33  void* user_obj);
34  NLIB_CEXPR WordFilter() NLIB_NOEXCEPT : prv_(nullptr) {}
35  ~WordFilter() NLIB_NOEXCEPT { Reset(); }
36  NLIB_DEFMOVE_PIMPL(WordFilter);
37  bool Init() NLIB_NOEXCEPT;
38  void Match(const char* doc, MatchCallback callback, void* user_obj) NLIB_NOEXCEPT {
39  this->Match(doc, nlib_strlen(doc), callback, user_obj);
40  }
41  void Match(const char* doc, MatchCallback callback) NLIB_NOEXCEPT {
42  this->Match(doc, callback, nullptr);
43  }
44  void Match(const char* data, size_t n, MatchCallback callback, void* user_obj) NLIB_NOEXCEPT;
45  void Match(const char* data, size_t n, MatchCallback callback) NLIB_NOEXCEPT {
46  this->Match(data, n, callback, nullptr);
47  }
48  void Reset() NLIB_NOEXCEPT;
49  bool Export(BinaryWriter* w) const NLIB_NOEXCEPT;
50  bool Import(BinaryReader* r) NLIB_NOEXCEPT;
51 
52  private:
53  class WordFilterPrivate;
54  WordFilterPrivate* prv_;
55  friend class WordFilterBuilder;
57 };
58 
60  public:
63  NLIB_DEFMOVE_PIMPL(WordFilterBuilder);
64  void Reset() NLIB_NOEXCEPT;
65  bool Init() NLIB_NOEXCEPT;
66  WordFilter* Build() NLIB_NOEXCEPT;
67 #ifdef __cpp_rvalue_references
68  std::unique_ptr<WordFilter> Build2() NLIB_NOEXCEPT { return decltype(Build2())(Build()); }
69 #endif
70  bool AddWord(const char* str) NLIB_NOEXCEPT;
71  bool AddWords(const char* str, size_t len) NLIB_NOEXCEPT;
72  bool AddWords(const char* str) NLIB_NOEXCEPT { return AddWords(str, nlib_strlen(str)); }
73  bool AddExcludeWord(const char* str) NLIB_NOEXCEPT;
74  bool AddExcludeWords(const char* str, size_t len) NLIB_NOEXCEPT;
75  bool AddExcludeWords(const char* str) NLIB_NOEXCEPT {
76  return AddExcludeWords(str, nlib_strlen(str));
77  }
78 
79  private:
80  struct WordFilterBuilderPrivate;
81  WordFilterBuilderPrivate* prv_;
83 };
84 
85 } // namespace succinct
86 NLIB_NAMESPACE_END
87 NLIB_DEFINE_STD_SWAP(::nlib_ns::succinct::WordFilter)
88 NLIB_DEFINE_STD_SWAP(::nlib_ns::succinct::WordFilterBuilder)
89 #if defined(_MSC_VER) && defined(nx_succinct_EXPORTS)
90 #undef NLIB_VIS_PUBLIC
91 #define NLIB_VIS_PUBLIC NLIB_WINIMPORT
92 #endif
93 
94 #endif // INCLUDE_NN_NLIB_SUCCINCT_WORDFILTER_H_
#define NLIB_DISALLOW_COPY_AND_ASSIGN(TypeName)
TypeName で指定されたクラスのコピーコンストラクタと代入演算子を禁止します。
Definition: Config.h:183
std::unique_ptr< WordFilter > Build2() noexcept
WordFilterオブジェクトを作成します。
Definition: WordFilter.h:68
#define NLIB_VIS_PUBLIC
関数やクラス等のシンボルをライブラリの外部に公開します。
Definition: Platform_unix.h:87
文章内に事前に指定した語の集合が含まれていないかどうかチェックするためのクラスです。 ...
Definition: WordFilter.h:30
~WordFilter() noexcept
デストラクタです。
Definition: WordFilter.h:35
Aho Corasick法を用いた文字列検索を行うためのクラスが定義されています。
constexpr WordFilter() noexcept
デフォルトコンストラクタです。実行後Init()による初期化を必要とします。
Definition: WordFilter.h:34
void Match(const char *data, size_t n, MatchCallback callback) noexcept
上記関数の引数省略版で、nullptrを引数として渡します。
Definition: WordFilter.h:45
#define NLIB_NOEXCEPT
環境に合わせてnoexcept 又は同等の定義がされます。
Definition: Config.h:109
bool AddExcludeWords(const char *str) noexcept
例外語の集合が入った配列から文字列を追加します。文字列の区切りは改行(CRLFかLF)である必要があります。 ...
Definition: WordFilter.h:75
#define NLIB_CEXPR
利用可能であればconstexprが定義されます。そうでない場合は空文字列です。
Definition: Config.h:111
void Match(const char *doc, MatchCallback callback) noexcept
上記関数の引数省略版で、nullptrを引数として渡します。
Definition: WordFilter.h:41
size_t nlib_strlen(const char *s)
内部でstrlen()を呼び出します。独自の実装が動作する場合もあります。
語と除外語に対応するWordFilterオブジェクトを作成するクラスです。
Definition: WordFilter.h:59
ストリーム(OutputStream)にバイナリを書き込むクラスです。
Definition: BinaryWriter.h:26
bool AddWords(const char *str) noexcept
検出対象の文字列の集合が入った配列から文字列を追加します。文字列の区切りは改行(CRLFかLF)である必要が...
Definition: WordFilter.h:72
#define NLIB_FINAL
利用可能であればfinalが定義されます。そうでない場合は空文字列です。
Definition: Config.h:250
ストリーム(InputStream)からバイナリを読み込むクラスです。
Definition: BinaryReader.h:26
constexpr WordFilterBuilder() noexcept
デフォルトコンストラクタです。実行後Init()による初期化を必要とします。
Definition: WordFilter.h:61
~WordFilterBuilder() noexcept
デストラクタです。
Definition: WordFilter.h:62