66 lines
1.7 KiB
C++
66 lines
1.7 KiB
C++
#include "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];
|
|
} |