xref: /haiku/headers/private/storage/sniffer/Pattern.h (revision 4c8e85b316c35a9161f5a1c50ad70bc91c83a76f)
1 //----------------------------------------------------------------------
2 //  This software is part of the Haiku distribution and is covered
3 //  by the MIT License.
4 //---------------------------------------------------------------------
5 /*!
6 	\file sniffer/Pattern.h
7 	Mime Sniffer Pattern declarations
8 */
9 #ifndef _SNIFFER_PATTERN_H
10 #define _SNIFFER_PATTERN_H
11 
12 #include <SupportDefs.h>
13 #include <string>
14 #include <sniffer/Range.h>
15 
16 class BPositionIO;
17 
18 namespace BPrivate {
19 namespace Storage {
20 namespace Sniffer {
21 
22 class Err;
23 
24 //! A byte string and optional mask to be compared against a data stream.
25 /*! The byte string and mask (if supplied) must be of the same length. */
26 class Pattern {
27 public:
28 	Pattern(const std::string &string, const std::string &mask);
29 	Pattern(const std::string &string);
30 	~Pattern();
31 
32 	status_t InitCheck() const;
33 	Err* GetErr() const;
34 
35 	bool Sniff(Range range, BPositionIO *data, bool caseInsensitive) const;
36 	ssize_t BytesNeeded() const;
37 
38 	status_t SetTo(const std::string &string, const std::string &mask);
39 private:
40 	bool Sniff(off_t start, off_t size, BPositionIO *data, bool caseInsensitive) const;
41 
42 	void SetStatus(status_t status, const char *msg = NULL);
43 	void SetErrorMessage(const char *msg);
44 
45 	std::string fString;
46 	std::string fMask;
47 
48 	status_t fCStatus;
49 	Err *fErrorMessage;
50 };
51 
52 };	// namespace Sniffer
53 };	// namespace Storage
54 };	// namespace BPrivate
55 
56 #endif	// _SNIFFER_PATTERN_H
57 
58 
59