XEnumerator write single item
This commit is contained in:
parent
e4d9f38b82
commit
ee1565b0e8
|
@ -29,10 +29,14 @@ class XEnumerator : public XObject {
|
||||||
|
|
||||||
virtual uint32_t item_count() const = 0;
|
virtual uint32_t item_count() const = 0;
|
||||||
virtual void WriteItems(uint8_t* buffer) = 0;
|
virtual void WriteItems(uint8_t* buffer) = 0;
|
||||||
|
virtual bool WriteItem(uint8_t* buffer) = 0;
|
||||||
|
|
||||||
|
size_t current_item() const { return current_item_; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
size_t item_capacity_;
|
size_t item_capacity_ = 0;
|
||||||
size_t item_size_;
|
size_t item_size_ = 0;
|
||||||
|
size_t current_item_ = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
class XStaticEnumerator : public XEnumerator {
|
class XStaticEnumerator : public XEnumerator {
|
||||||
|
@ -58,6 +62,18 @@ class XStaticEnumerator : public XEnumerator {
|
||||||
std::memcpy(buffer, buffer_.data(), item_count_ * item_size_);
|
std::memcpy(buffer, buffer_.data(), item_count_ * item_size_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool WriteItem(uint8_t* buffer) {
|
||||||
|
if (current_item_ >= item_count_) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::memcpy(buffer, buffer_.data() + current_item_ * item_size_,
|
||||||
|
item_size_);
|
||||||
|
current_item_++;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
uint32_t item_count_;
|
uint32_t item_count_;
|
||||||
std::vector<uint8_t> buffer_;
|
std::vector<uint8_t> buffer_;
|
||||||
|
|
Loading…
Reference in New Issue