xref: /haiku/headers/private/storage/sniffer/Rule.h (revision 2150894b73ca65b585bdf9808f6c4330d44234e8)
1674e18fbSTyler Dauwalder //----------------------------------------------------------------------
2674e18fbSTyler Dauwalder //  This software is part of the OpenBeOS distribution and is covered
3674e18fbSTyler Dauwalder //  by the OpenBeOS license.
4674e18fbSTyler Dauwalder //---------------------------------------------------------------------
5674e18fbSTyler Dauwalder /*!
6674e18fbSTyler Dauwalder 	\file sniffer/Rule.h
7674e18fbSTyler Dauwalder 	Mime sniffer rule declarations
8674e18fbSTyler Dauwalder */
982b75665STyler Dauwalder #ifndef _SNIFFER_RULE_H
1082b75665STyler Dauwalder #define _SNIFFER_RULE_H
11674e18fbSTyler Dauwalder 
1201293d6eSTyler Dauwalder #include <SupportDefs.h>
13*2150894bSTyler Dauwalder 
14*2150894bSTyler Dauwalder #include <sys/types.h>
1568faee10STyler Dauwalder #include <vector>
16674e18fbSTyler Dauwalder 
1701293d6eSTyler Dauwalder class BPositionIO;
1801293d6eSTyler Dauwalder 
1909d84e61STyler Dauwalder namespace BPrivate {
2009d84e61STyler Dauwalder namespace Storage {
21674e18fbSTyler Dauwalder namespace Sniffer {
22674e18fbSTyler Dauwalder 
2393d145bbSTyler Dauwalder class DisjList;
24674e18fbSTyler Dauwalder 
250bc621d5STyler Dauwalder /*! \brief A priority and a list of expressions to be used for sniffing out the
260bc621d5STyler Dauwalder 	type of an untyped file.
270bc621d5STyler Dauwalder */
28674e18fbSTyler Dauwalder class Rule {
29674e18fbSTyler Dauwalder public:
30674e18fbSTyler Dauwalder 	Rule();
3168faee10STyler Dauwalder 	~Rule();
3201293d6eSTyler Dauwalder 
3301293d6eSTyler Dauwalder 	status_t InitCheck() const;
3401293d6eSTyler Dauwalder 	double Priority() const;
3501293d6eSTyler Dauwalder 	bool Sniff(BPositionIO *data) const;
36*2150894bSTyler Dauwalder 	ssize_t BytesNeeded() const;
37674e18fbSTyler Dauwalder private:
3868faee10STyler Dauwalder 	friend class Parser;
3968faee10STyler Dauwalder 
4068faee10STyler Dauwalder 	void Unset();
4193d145bbSTyler Dauwalder 	void SetTo(double priority, std::vector<DisjList*>* list);
4268faee10STyler Dauwalder 
4368faee10STyler Dauwalder 	double fPriority;
4493d145bbSTyler Dauwalder 	std::vector<DisjList*> *fConjList;	// A list of DisjLists to be ANDed
45674e18fbSTyler Dauwalder };
46674e18fbSTyler Dauwalder 
4709d84e61STyler Dauwalder };	// namespace Sniffer
4809d84e61STyler Dauwalder };	// namespace Storage
4909d84e61STyler Dauwalder };	// namespace BPrivate
50674e18fbSTyler Dauwalder 
5182b75665STyler Dauwalder #endif	// _SNIFFER_RULE_H
5209d84e61STyler Dauwalder 
5309d84e61STyler Dauwalder 
54