From ee1565b0e82837c7c8125bed80f34684b3ac539c Mon Sep 17 00:00:00 2001 From: "Dr. Chat" Date: Mon, 27 Jul 2015 18:18:05 -0500 Subject: [PATCH] XEnumerator write single item --- src/xenia/kernel/objects/xenumerator.h | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/xenia/kernel/objects/xenumerator.h b/src/xenia/kernel/objects/xenumerator.h index 49c6647b0..cea1f92be 100644 --- a/src/xenia/kernel/objects/xenumerator.h +++ b/src/xenia/kernel/objects/xenumerator.h @@ -29,10 +29,14 @@ class XEnumerator : public XObject { virtual uint32_t item_count() const = 0; virtual void WriteItems(uint8_t* buffer) = 0; + virtual bool WriteItem(uint8_t* buffer) = 0; + + size_t current_item() const { return current_item_; } protected: - size_t item_capacity_; - size_t item_size_; + size_t item_capacity_ = 0; + size_t item_size_ = 0; + size_t current_item_ = 0; }; class XStaticEnumerator : public XEnumerator { @@ -58,6 +62,18 @@ class XStaticEnumerator : public XEnumerator { 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: uint32_t item_count_; std::vector buffer_;