private:
Buffer *buffer = 0;
- unsigned offset = 0;
+ std::size_t offset = 0;
Bufferable *next_in_buffer = 0;
Bufferable *prev_in_buffer = 0;
mutable bool location_dirty = false;
/** 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;
+ std::size_t get_required_buffer_size() const;
/** Uploads new data into the buffer if necessary. */
void refresh() const { if(dirty) upload_data(0); }
/** Returns an object which can be used to upload data to the buffer using
mapped memory. */
- AsyncUpdater *refresh_async() const;
+ AsyncUpdater *refresh_async() const { return dirty ? new AsyncUpdater(*this) : 0; }
private:
void unlink_from_buffer();
const Buffer *get_buffer() const { return buffer; }
/** Returns the size of the data, in bytes. */
- virtual unsigned get_data_size() const = 0;
+ virtual std::size_t get_data_size() const = 0;
protected:
/** Returns a pointer to the start of data in client memory. */
/** Returns the alignment required for the data, in bytes. The offset is
guaranteed to be a multiple of this. */
- virtual unsigned get_alignment() const { return 1; }
+ virtual std::size_t get_alignment() const { return 1; }
/** Updates the offsets for the chain so that data from different objects
does not overlap. Should be called if either data size or alignment
public:
/** Returns the offset of the data from the beginning of the buffer. */
- unsigned get_offset() const { return offset; }
+ std::size_t get_offset() const { return offset; }
private:
/** Uploads data to the buffer. Receives pointer to mapped buffer memory as