Base class for things that can store data in buffers. Multiple Bufferables
may be put in the same buffer.
-A dirty flag is provided for derived classes. It should be set when the data
-in the buffer is considered out of date, and is cleared by Bufferable after
-uploading fresh data to the buffer.
+Derived classes should call mark_dirty() when the stored data has changed.
*/
class Bufferable: public NonCopyable
{
Bufferable *next_in_buffer = 0;
Bufferable *prev_in_buffer = 0;
mutable bool location_dirty = false;
-protected:
mutable bool dirty = false;
+protected:
Bufferable() = default;
Bufferable(Bufferable &&);
public:
/** Sets the buffer to use. If prev is not null, it must use the same
buffer, and this object is inserted after it.
- Date is not uploaded immediately, but only when refresh() is called. */
+ Data is not uploaded immediately, but only when refresh() is called. */
void use_buffer(Buffer *, Bufferable *prev = 0);
/** Sets the buffer for the entire chain of objects. */
changes. */
void update_offset();
+ /* Indicates that the data of the bufferable has changed and should be
+ uploaded to the buffer again. */
+ void mark_dirty();
+
public:
/** Returns the offset of the data from the beginning of the buffer. */
std::size_t get_offset() const { return offset; }