nlib
WordFilter.h
[詳解]
1 
2 #pragma once
3 #ifndef INCLUDE_NN_NLIB_SUCCINCT_WORDFILTER_H_
4 #define INCLUDE_NN_NLIB_SUCCINCT_WORDFILTER_H_
5 
6 #include <string.h>
7 
8 #include "nn/nlib/UniquePtr.h"
10 #include "nn/nlib/succinct/Trie.h"
11 
12 #if defined(_MSC_VER) && defined(nx_succinct_EXPORTS)
13 #undef NLIB_VIS_PUBLIC
14 #define NLIB_VIS_PUBLIC NLIB_WINEXPORT
15 #endif
16 
17 NLIB_NAMESPACE_BEGIN
18 namespace succinct {
19 
20 class WordFilterImpl;
22  public:
23  typedef bool (*MatchCallback)(const char* first, const char* last, uint32_t nodeid,
24  void* user_obj);
27  NLIB_VIS_PUBLIC WordFilter(WordFilter& rhs, move_tag) NLIB_NOEXCEPT; // NOLINT
28  WordFilter& assign(WordFilter& rhs, move_tag) NLIB_NOEXCEPT { // NOLINT
29  WordFilter().swap(*this);
30  this->swap(rhs);
31  return *this;
32  }
33 #ifdef NLIB_CXX11_RVALUE_REFERENCES
34  NLIB_MOVE_MEMBER_HELPER_X_COMMON(WordFilter)
36 #endif
37  void swap(WordFilter& rhs) NLIB_NOEXCEPT { m_Impl.swap(rhs.m_Impl); }
38  NLIB_VIS_PUBLIC bool Init() NLIB_NOEXCEPT;
39  void Match(const char* doc, MatchCallback callback, void* user_obj = NULL) NLIB_NOEXCEPT {
40  this->Match(doc, nlib_strlen(doc), callback, user_obj);
41  }
42  NLIB_VIS_PUBLIC void Match(const char* data, size_t n, MatchCallback callback,
43  void* user_obj = NULL) NLIB_NOEXCEPT;
44  NLIB_VIS_PUBLIC void Reset() NLIB_NOEXCEPT;
45  NLIB_VIS_PUBLIC bool Export(BinaryWriter* w) const NLIB_NOEXCEPT;
46  NLIB_VIS_PUBLIC bool Import(BinaryReader* r) NLIB_NOEXCEPT;
47 
48  private:
49  UniquePtr<WordFilterImpl> m_Impl;
50  friend class WordFilterBuilder;
52 };
53 
54 class WordFilterBuilder NLIB_FINAL {
55  public:
56  WordFilterBuilder() NLIB_NOEXCEPT {}
57  ~WordFilterBuilder() NLIB_NOEXCEPT {}
58  NLIB_VIS_PUBLIC bool Init() NLIB_NOEXCEPT;
59  NLIB_VIS_PUBLIC WordFilter* Build() NLIB_NOEXCEPT;
60  NLIB_VIS_PUBLIC bool AddWord(const char* str) NLIB_NOEXCEPT;
61  NLIB_VIS_PUBLIC bool AddWords(const char* str, size_t len) NLIB_NOEXCEPT;
62  bool AddWords(const char* str) NLIB_NOEXCEPT {
63  return AddWords(str, strlen(str));
64  }
65  NLIB_VIS_PUBLIC bool AddExcludeWord(const char* str) NLIB_NOEXCEPT;
66  NLIB_VIS_PUBLIC bool AddExcludeWords(const char* str, size_t len) NLIB_NOEXCEPT;
67  bool AddExcludeWords(const char* str) NLIB_NOEXCEPT {
68  return AddExcludeWords(str, strlen(str));
69  }
70 
71  private:
72  ReallocCstringVec m_MatchWords;
73  ReallocCstringVec m_ExcludeWords;
74  NLIB_DISALLOW_COPY_AND_ASSIGN(WordFilterBuilder);
75 };
76 
77 } // namespace succinct
78 NLIB_NAMESPACE_END
79 
80 #if defined(_MSC_VER) && defined(nx_succinct_EXPORTS)
81 #undef NLIB_VIS_PUBLIC
82 #define NLIB_VIS_PUBLIC NLIB_WINIMPORT
83 #endif
84 
85 #endif // INCLUDE_NN_NLIB_SUCCINCT_WORDFILTER_H_
#define NLIB_NOEXCEPT
環境に合わせてnoexcept 又は同等の定義がされます。
Definition: Platform.h:2151
LOUDSを利用したTrieが実装されています。
#define NLIB_FINAL
利用可能であればfinalが定義されます。そうでない場合は空文字列です。
#define NLIB_DISALLOW_COPY_AND_ASSIGN(TypeName)
TypeName で指定されたクラスのコピーコンストラクタと代入演算子を禁止します。
Definition: Config.h:126
void swap(WordFilter &rhs) noexcept
オブジェクトの内容をスワップします。
Definition: WordFilter.h:37
C文字列のベクタをreallocベースで実装しています。
Definition: ReallocVec.h:214
UniquePtrはポインタの所有権を保持し、UniquePtrがスコープから出るときにデストラクタでポインタをDELで指...
Definition: UniquePtr.h:96
std::unique_ptrに相当するクラスが定義されています。
文章内に事前に指定した語の集合が含まれていないかどうかチェックするためのクラスです。 ...
Definition: WordFilter.h:21
空の構造体で、関数の引数をムーブすべきことを示すために利用されます。
Definition: Config.h:219
Aho Corasick法を用いた文字列検索を行うためのクラスが定義されています。
bool AddExcludeWords(const char *str) noexcept
例外語の集合が入った配列から文字列を追加します。文字列の区切りは改行(CRLFかLF)である必要があります。 ...
Definition: WordFilter.h:67
size_t nlib_strlen(const char *s)
内部でstrlen()を呼び出します。独自の実装が動作する場合もあります。
語と除外語に対応するWordFilterオブジェクトを作成するクラスです。
Definition: WordFilter.h:54
ストリーム(OutputStream)にバイナリを書き込むクラスです。
Definition: BinaryWriter.h:13
#define NLIB_VIS_PUBLIC
関数やクラス等のシンボルをライブラリの外部に公開します。
Definition: Platform_unix.h:51
ストリーム(InputStream)からバイナリを読み込むクラスです。
Definition: BinaryReader.h:13
WordFilterBuilder() noexcept
コンストラクタです。
Definition: WordFilter.h:56
~WordFilterBuilder() noexcept
デストラクタです。
Definition: WordFilter.h:57