xref: /haiku/headers/private/storage/sniffer/CharStream.h (revision 268f99dd7dc4bd7474a8bd2742d3f1ec1de6752a)
189ec8a81STyler Dauwalder //----------------------------------------------------------------------
2*2ca13760SColdfirex //  This software is part of the Haiku distribution and is covered
3b6f76ebeSAugustin Cavalier //  by the MIT License.
489ec8a81STyler Dauwalder //---------------------------------------------------------------------
589ec8a81STyler Dauwalder /*!
689ec8a81STyler Dauwalder 	\file sniffer/CharStream.h
789ec8a81STyler Dauwalder 	Character stream class
889ec8a81STyler Dauwalder */
989ec8a81STyler Dauwalder #ifndef _SNIFFER_CHAR_STREAM_H
1089ec8a81STyler Dauwalder #define _SNIFFER_CHAR_STREAM_H
1189ec8a81STyler Dauwalder 
1289ec8a81STyler Dauwalder #include <SupportDefs.h>
1389ec8a81STyler Dauwalder 
1489ec8a81STyler Dauwalder #include <string>
1589ec8a81STyler Dauwalder 
1689ec8a81STyler Dauwalder namespace BPrivate {
1789ec8a81STyler Dauwalder namespace Storage {
1889ec8a81STyler Dauwalder namespace Sniffer {
1989ec8a81STyler Dauwalder 
2089ec8a81STyler Dauwalder //! Manages a stream of characters
2189ec8a81STyler Dauwalder /*! CharStream is used by the scanner portion of the parser, which is implemented
2289ec8a81STyler Dauwalder 	in TokenStream::SetTo().
2389ec8a81STyler Dauwalder 
2489ec8a81STyler Dauwalder 	It's also used by BPrivate::TRoster while parsing through the the
2589ec8a81STyler Dauwalder 	roster's RosterSettings file.
2689ec8a81STyler Dauwalder */
2789ec8a81STyler Dauwalder class CharStream {
2889ec8a81STyler Dauwalder public:
2989ec8a81STyler Dauwalder 	CharStream(const std::string &string);
3089ec8a81STyler Dauwalder 	CharStream();
3189ec8a81STyler Dauwalder 	virtual ~CharStream();
3289ec8a81STyler Dauwalder 
3389ec8a81STyler Dauwalder 	status_t SetTo(const std::string &string);
3489ec8a81STyler Dauwalder 	void Unset();
3589ec8a81STyler Dauwalder 	status_t InitCheck() const;
3689ec8a81STyler Dauwalder 	bool IsEmpty() const;
3789ec8a81STyler Dauwalder 	size_t Pos() const;
3889ec8a81STyler Dauwalder 	const std::string& String() const;
3989ec8a81STyler Dauwalder 
4089ec8a81STyler Dauwalder 	char Get();
4189ec8a81STyler Dauwalder 	void Unget();
4289ec8a81STyler Dauwalder 
4389ec8a81STyler Dauwalder private:
4489ec8a81STyler Dauwalder 	std::string fString;
4589ec8a81STyler Dauwalder 	size_t fPos;
4689ec8a81STyler Dauwalder 	status_t fCStatus;
4789ec8a81STyler Dauwalder 
4889ec8a81STyler Dauwalder 	CharStream(const CharStream &ref);
4989ec8a81STyler Dauwalder 	CharStream& operator=(const CharStream &ref);
5089ec8a81STyler Dauwalder };
5189ec8a81STyler Dauwalder 
5289ec8a81STyler Dauwalder };	// namespace Sniffer
5389ec8a81STyler Dauwalder };	// namespace Storage
5489ec8a81STyler Dauwalder };	// namespace BPrivate
5589ec8a81STyler Dauwalder 
5689ec8a81STyler Dauwalder #endif // _SNIFFER_CHAR_STREAM_H
57