You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			72 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C++
		
	
			
		
		
	
	
			72 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C++
		
	
| /*! \file
 | |
|  *  \brief \ref Stringbuffer composes single characters into a buffer
 | |
|  */
 | |
| 
 | |
| #pragma once
 | |
| #include "../types.h"
 | |
| 
 | |
| /*! \brief The class Stringbuffer composes single characters into a longer text
 | |
|  * that can be processed on block.
 | |
|  *
 | |
|  *  To make Stringbuffer as versatile as possible, the class does make
 | |
|  *  assumptions about neither the underlying hardware, nor the meaning of
 | |
|  *  "processing". When flush() is called (i.e., either on explicit request or
 | |
|  *  once the buffer is full). To be hardware independent, flush() is to be
 | |
|  *  implemented by the derived classes.
 | |
|  *
 | |
|  *  \par Hints for Implementation
 | |
|  *  Use a buffer of fixed size for caching characters, which should be
 | |
|  *  accessible by derived classes.
 | |
|  *  Keep in mind that the derived implementation of flush() will need to know
 | |
|  *  about numbers of characters in the buffer.
 | |
|  *
 | |
|  *  \par Notes
 | |
|  *  Reason for the existence of this class is that generating longer texts is
 | |
|  *  often implemented by assembly of small fragments (such as single characters
 | |
|  *  or numbers).
 | |
|  *  However, writing such small fragments directly to (for example) screen is
 | |
|  *  quite inefficient (e.g., due to the use of IO ports, syscalls, or locks) and
 | |
|  *  can be improved drastically by delaying the output step until the assembly
 | |
|  *  is finished (or the buffer runs full).
 | |
|  */
 | |
| class Stringbuffer {
 | |
|   // Prevent copies and assignments
 | |
|   Stringbuffer(const Stringbuffer&) = delete;
 | |
|   Stringbuffer& operator=(const Stringbuffer&) = delete;
 | |
| 
 | |
|   // All variables and methods are protected in this class,
 | |
|   // as the derived classes need direct access to be buffer,
 | |
|   // the constructor, the destructor, and the method put.
 | |
|   // flush() is to be implemented either way and may be redefined
 | |
|   // as public.
 | |
| 
 | |
|  protected:
 | |
|   /*! \brief Constructor; Marks the buffer as empty
 | |
|    */
 | |
|   Stringbuffer() {}
 | |
| 
 | |
|   /*! \brief Inserts a character into the buffer.
 | |
|    *
 | |
|    *  Once the buffer is full, a call to flush() will be issued and
 | |
|    *  thereby clearing the buffer.
 | |
|    *
 | |
|    *  \param c Char to be added
 | |
|    *
 | |
|    *  \todo(11) Implement
 | |
|    */
 | |
|   void put(char c);
 | |
| 
 | |
|   /*! \brief Flush the buffer contents
 | |
|    *
 | |
|    *  This method is to be defined in derived classes, as only those know
 | |
|    *  how to print characters.
 | |
|    *  flush() is required to reset the position pos.
 | |
|    */
 | |
|   virtual void flush() = 0;
 | |
| 
 | |
|  public:
 | |
|   /*! \brief Destructor (nothing to do here)
 | |
|    */
 | |
|   virtual ~Stringbuffer() {}
 | |
| };
 |