+ /** Sets the buffer to use. If prev is not null, it must use the same
+ buffer, and this object is inserted after it. */
+ void use_buffer(Buffer *buf, Bufferable *prev = 0);
+
+ /** Sets the buffer for the entire chain of objects. */
+ void change_buffer(Buffer *);
+
+ /** Returns the total amount of storage required by this object and others
+ in the same chain, including any alignment between objects. */
+ unsigned get_required_buffer_size() const;
+
+ /** Uploads new data into the buffer if necessary. */
+ void refresh() const { if(buffer && dirty) upload_data(0); }
+
+ /** Returns an object which can be used to upload data to the buffer using
+ mapped memory. */
+ AsyncUpdater *refresh_async() const;
+