X-Git-Url: http://git.tdb.fi/?p=libs%2Fcore.git;a=blobdiff_plain;f=source%2Fbase.h;fp=source%2Fbase.h;h=774d03467b57f73b5af04217dcf8e3cae70046d1;hp=584c14ec2445379fc5538a15217d326ef9588415;hb=b97d4e9f86e90254ab9edef7ee62a910f6333c78;hpb=49c1f3c3ffdf318579a809f3f800442c0c76c818 diff --git a/source/base.h b/source/base.h index 584c14e..774d034 100644 --- a/source/base.h +++ b/source/base.h @@ -18,135 +18,101 @@ leaving stale pointers in an EventDispatcher. class Base { public: - /** - Emitted when there is data available for reading. If all data is not read, - the signal is emitted again immediately. - */ + /** Emitted when there is data available for reading. If all data is not + read, the signal is emitted again immediately. */ sigc::signal signal_data_available; - /** - Emitted when there is no more data to be read. - */ + /** Emitted when there is no more data to be read. */ sigc::signal signal_end_of_file; - /** - Emitted when there is a nonlinearity in I/O (such as a file being seeked) - and any data buffered by upper layers needs to be flushed. - */ + /** Emitted when there is a nonlinearity in I/O (such as a file being + seeked) and any data buffered by upper layers needs to be flushed. */ sigc::signal signal_flush_required; - /** - Emitted when the I/O object has closed. - */ + /** Emitted when the I/O object has closed. */ sigc::signal signal_closed; - /** - Emitted when the mask of interesting events changes. Mainly for use by - EventDispatcher. - */ + /** Emitted when the mask of interesting events changes. Mainly for use by + EventDispatcher. */ sigc::signal signal_events_changed; - /** - Emitted when the object is deleted. Mainly for use by EventDispatcher. - */ + /** Emitted when the object is deleted. Mainly for use by + EventDispatcher. */ sigc::signal signal_deleted; - /** - Sets blocking mode. When blocking is enabled, most operations won't return - until they can make progress. When blocking is disabled, these operations - may return immediately with a return code indicating that nothing was done. +protected: + Mode mode; + PollEvent events; + bool eof_flag; + + Base(); +private: + Base(const Base &); + Base &operator=(const Base &); +public: + virtual ~Base(); + + /** Sets blocking mode. When blocking is enabled, most operations won't + return until they can make progress. When blocking is disabled, these + operations may return immediately with a return code indicating that nothing + was done. - Blocking is enabled by default. - */ + Blocking is enabled by default. */ virtual void set_block(bool) { } - /** - Returns the current mode flags. - */ + /** Returns the current mode flags. */ Mode get_mode() const { return mode; } - /** - Writes data from a buffer. Subject to blocking. - - @param b Buffer to write from - @param c Number of bytes to write +protected: + virtual unsigned do_write(const char *, unsigned) =0; + virtual unsigned do_read(char *, unsigned) =0; - @return Number of bytes written - */ +public: + /** Writes data from a buffer. Subject to blocking. Returns the number of + bytes written, which may be zero for a non-blockin operation. */ unsigned write(const char *b, unsigned c) { return do_write(b, c); } - /** - Writes a string. This is identical to calling write(s.data(), s.size()). - */ + /** Writes a string. This is identical to calling + write(s.data(), s.size()). */ unsigned write(const std::string &s) { return do_write(s.data(), s.size()); } - /** - Writes a single character. This is identical to calling write(&c, 1). - */ + /** Writes a single character. This is identical to calling + write(&c, 1). */ virtual unsigned put(char c) { return do_write(&c, 1); } - /** - Reads data into a buffer. Subject to blocking. - - @param b Buffer to read into - @param c Maximum number of bytes to read - - @return Number of bytes read - */ + /** Reads data into a buffer. Subject to blocking. Returns the number of + bytes read, which may be zero for a non-blocking operation. */ unsigned read(char *b, unsigned c) { return do_read(b, c); } - /** - Reads characters up to the next linefeed or end-of-file. The linefeed is not - included in the line. - - @param line String to put the characters into - - @return Whether anything was read - */ + /** Reads characters up to the next linefeed or end-of-file. The linefeed + is not included in the line. Returns true if a line was successfully read, + false otherwise. */ virtual bool getline(std::string &); - /** - Reads a single character. - - @return A character, or -1 if none were available - */ + /** Reads a single character. Returns -1 if no character was available due + to end-of-file or non-blocking operation. */ virtual int get(); - /** - Returns the end-of-file flag. - */ + /** Returns the end-of-file flag. */ bool eof() const { return eof_flag; } - /** - Returns a mask of the currently interesting events. Used by EventDispatcher. - */ +protected: + void set_events(PollEvent); + +public: + /** Returns a mask of the currently interesting events. Used by + EventDispatcher. */ PollEvent get_events() const { return events; } - /** - Returns a handle for polling. Should throw if the object does not have an - event handle. - */ + /** Returns a handle for polling. Should throw if the object does not have + an event handle. */ virtual Handle get_event_handle() =0; - /** - Notifies the object of an event. Used by EventDispatcher. - */ + /** Notifies the object of an event. Used by EventDispatcher. */ void event(PollEvent); - virtual ~Base(); protected: - Mode mode; - PollEvent events; - bool eof_flag; - - Base(); - void set_events(PollEvent); - virtual void on_event(PollEvent) { } - virtual unsigned do_write(const char *, unsigned) =0; - virtual unsigned do_read(char *, unsigned) =0; -private: - Base(const Base &); - Base &operator=(const Base &); + virtual void on_event(PollEvent) { } }; } // namespace IO