#include "../../Platform/stdafx.h" #include "FloatBuffer.h" // Allocates a new float 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 floats FloatBuffer::FloatBuffer(unsigned int capacity) : Buffer(capacity) { buffer = new float[capacity]; memset(buffer, 0, sizeof(float) * capacity); } FloatBuffer::FloatBuffer(unsigned int capacity, float* backingArray) : Buffer(capacity) { hasBackingArray = true; buffer = backingArray; } FloatBuffer::~FloatBuffer() { if (!hasBackingArray) delete[] 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 FloatBuffer* FloatBuffer::flip() { m_limit = m_position; m_position = 0; return this; } // Relative put method (optional operation). // Writes the given float into this buffer at the current position, and then // increments the position. // // Parameters: // f - The float to be written // Returns: // This buffer FloatBuffer* FloatBuffer::put(float f) { buffer[m_position++] = f; return this; } // Relative bulk get method. // This method transfers floats from this buffer into the given destination // array. An invocation of this method of the form src.get(a) behaves in exactly // the same way as the invocation // // src.get(a, 0, a.length) // Returns: // This buffer void FloatBuffer::get(floatArray* dst) { assert(dst->length <= m_capacity); for (unsigned int i = 0; i < dst->length; i++) dst->data[i] = buffer[i]; }