[ox/buffer] Add copy constructor to NodeBuffer
This commit is contained in:
		
							
								
								
									
										18
									
								
								deps/ox/src/ox/ptrarith/nodebuffer.hpp
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										18
									
								
								deps/ox/src/ox/ptrarith/nodebuffer.hpp
									
									
									
									
										vendored
									
									
								
							@@ -75,6 +75,8 @@ class __attribute__((packed)) NodeBuffer {
 | 
			
		||||
	public:
 | 
			
		||||
		NodeBuffer() = default;
 | 
			
		||||
 | 
			
		||||
		NodeBuffer(const NodeBuffer &other);
 | 
			
		||||
 | 
			
		||||
		explicit NodeBuffer(size_t size);
 | 
			
		||||
 | 
			
		||||
		const Iterator iterator() const;
 | 
			
		||||
@@ -120,9 +122,11 @@ class __attribute__((packed)) NodeBuffer {
 | 
			
		||||
		 */
 | 
			
		||||
		size_t spaceNeeded(size_t size);
 | 
			
		||||
 | 
			
		||||
	private:
 | 
			
		||||
		void compact(void (*cb)(ItemPtr itemMoved));
 | 
			
		||||
		void compact(void (*cb)(ItemPtr itemMoved) = nullptr);
 | 
			
		||||
 | 
			
		||||
		void truncate();
 | 
			
		||||
 | 
			
		||||
	private:
 | 
			
		||||
		uint8_t *data();
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
@@ -132,6 +136,11 @@ NodeBuffer<size_t, Item>::NodeBuffer(size_t size) {
 | 
			
		||||
	m_header.size = size;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template<typename size_t, typename Item>
 | 
			
		||||
NodeBuffer<size_t, Item>::NodeBuffer(const NodeBuffer &other) {
 | 
			
		||||
	ox_memcpy(this, &other, other.size());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template<typename size_t, typename Item>
 | 
			
		||||
const typename NodeBuffer<size_t, Item>::Iterator NodeBuffer<size_t, Item>::iterator() const {
 | 
			
		||||
	return Iterator(this, firstItem());
 | 
			
		||||
@@ -314,6 +323,11 @@ void NodeBuffer<size_t, Item>::compact(void (*cb)(ItemPtr)) {
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template<typename size_t, typename Item>
 | 
			
		||||
void NodeBuffer<size_t, Item>::truncate() {
 | 
			
		||||
	m_header.size = m_header.bytesUsed;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template<typename size_t, typename Item>
 | 
			
		||||
uint8_t *NodeBuffer<size_t, Item>::data() {
 | 
			
		||||
	return reinterpret_cast<uint8_t*>(ptr(sizeof(*this)).get());
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user