From b691c43c44ff180d10e7d4a9afc83b98551ff586 Mon Sep 17 00:00:00 2001 From: daoge_cmd <3523206925@qq.com> Date: Sun, 1 Mar 2026 12:16:08 +0800 Subject: Initial commit --- Minecraft.World/IntBuffer.cpp | 113 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 Minecraft.World/IntBuffer.cpp (limited to 'Minecraft.World/IntBuffer.cpp') diff --git a/Minecraft.World/IntBuffer.cpp b/Minecraft.World/IntBuffer.cpp new file mode 100644 index 00000000..1bb5e26a --- /dev/null +++ b/Minecraft.World/IntBuffer.cpp @@ -0,0 +1,113 @@ +#include "stdafx.h" + +#include "IntBuffer.h" + +//Allocates a new int buffer. +//The new buffer's position will be zero, its limit will be its capacity, and its mark will be undefined. +//It will have a backing array, and its array offset will be zero. +// +//Parameters: +//capacity - The new buffer's capacity, in ints +IntBuffer::IntBuffer(unsigned int capacity) : Buffer( capacity ) +{ + buffer = new int[capacity]; + memset( buffer,0,sizeof(int)*capacity); +} + +IntBuffer::IntBuffer( unsigned int capacity, int *backingArray ) : Buffer( capacity ) +{ + hasBackingArray = true; + buffer = backingArray; +} + +IntBuffer::~IntBuffer() +{ + if( !hasBackingArray ) + delete[] buffer; +} + +int *IntBuffer::getBuffer() +{ + return buffer; +} + +//Flips this buffer. The limit is set to the current position and then the position is set to zero. +//If the mark is defined then it is discarded. +// +//Returns: +//This buffer +IntBuffer *IntBuffer::flip() +{ + m_limit = m_position; + m_position = 0; + return this; +} + +//Absolute get method. Reads the int at the given index. +//Parameters: +//index - The index from which the int will be read +//Returns: +//The int at the given index +int IntBuffer::get(unsigned int index) +{ + assert( index < m_limit ); + + return buffer[index]; +} + +//Relative bulk put method (optional operation). +//This method transfers ints into this buffer from the given source array. +//If there are more ints to be copied from the array than remain in this buffer, that is, if length > remaining(), +//then no ints are transferred and a BufferOverflowException is thrown. +// +//Otherwise, this method copies length ints from the given array into this buffer, starting at the given offset in the array +//and at the current position of this buffer. The position of this buffer is then incremented by length. +// +//In other words, an invocation of this method of the form dst.put(src, off, len) has exactly the same effect as the loop +// +// for (int i = off; i < off + len; i++) +// dst.put(a[i]); +//except that it first checks that there is sufficient space in this buffer and it is potentially much more efficient. +//Parameters: +//src - The array from which ints are to be read +//offset - The offset within the array of the first int to be read; must be non-negative and no larger than array.length +//length - The number of ints to be read from the given array; must be non-negative and no larger than array.length - offset +//Returns: +//This buffer +IntBuffer *IntBuffer::put(intArray *inputArray, unsigned int offset, unsigned int length) +{ + assert( offset + length < inputArray->length ); + + std::copy( inputArray->data +offset, inputArray->data +offset+length, buffer+m_position ); + + m_position += length; + + return this; +} + +IntBuffer *IntBuffer::put(intArray inputArray) +{ + if( inputArray.length > remaining() ) + assert( false ); //TODO 4J Stu - Some kind of exception? + + std::copy( inputArray.data, inputArray.data + inputArray.length, buffer+m_position ); + + m_position += inputArray.length; + + return this; +} + +//Writes the given int into this buffer at the current position, and then increments the position. +// +//Parameters: +//i - The int to be written +//Returns: +//This buffer +IntBuffer *IntBuffer::put(int i) +{ + assert( m_position < m_limit ); + + buffer[m_position++] = i; + + return this; +} \ No newline at end of file -- cgit v1.2.3