Return-Path: Delivered-To: apmail-activemq-commits-archive@www.apache.org Received: (qmail 65643 invoked from network); 1 Dec 2007 14:13:16 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 1 Dec 2007 14:13:16 -0000 Received: (qmail 11704 invoked by uid 500); 1 Dec 2007 14:13:04 -0000 Delivered-To: apmail-activemq-commits-archive@activemq.apache.org Received: (qmail 11673 invoked by uid 500); 1 Dec 2007 14:13:04 -0000 Mailing-List: contact commits-help@activemq.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@activemq.apache.org Delivered-To: mailing list commits@activemq.apache.org Received: (qmail 11664 invoked by uid 99); 1 Dec 2007 14:13:03 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 01 Dec 2007 06:13:03 -0800 X-ASF-Spam-Status: No, hits=-100.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 01 Dec 2007 14:12:52 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id D6B151A983A; Sat, 1 Dec 2007 06:12:54 -0800 (PST) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r600136 - in /activemq/activemq-cpp/decaf/trunk/src/main/decaf/nio: FloatBuffer.cpp FloatBuffer.h Date: Sat, 01 Dec 2007 14:12:54 -0000 To: commits@activemq.apache.org From: tabish@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20071201141254.D6B151A983A@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: tabish Date: Sat Dec 1 06:12:54 2007 New Revision: 600136 URL: http://svn.apache.org/viewvc?rev=600136&view=rev Log: http://issues.apache.org/activemq/browse/AMQCPP-103 Working on the NIO package Added: activemq/activemq-cpp/decaf/trunk/src/main/decaf/nio/FloatBuffer.cpp activemq/activemq-cpp/decaf/trunk/src/main/decaf/nio/FloatBuffer.h Added: activemq/activemq-cpp/decaf/trunk/src/main/decaf/nio/FloatBuffer.cpp URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/decaf/trunk/src/main/decaf/nio/FloatBuffer.cpp?rev=600136&view=auto ============================================================================== --- activemq/activemq-cpp/decaf/trunk/src/main/decaf/nio/FloatBuffer.cpp (added) +++ activemq/activemq-cpp/decaf/trunk/src/main/decaf/nio/FloatBuffer.cpp Sat Dec 1 06:12:54 2007 @@ -0,0 +1,252 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "FloatBuffer.h" + +#include +#include + +using namespace std; +using namespace decaf; +using namespace decaf::nio; +using namespace decaf::lang; +using namespace decaf::lang::exceptions; + +//////////////////////////////////////////////////////////////////////////////// +FloatBuffer::FloatBuffer( std::size_t capacity ) + : Buffer( capacity ) { + +} + +//////////////////////////////////////////////////////////////////////////////// +std::string FloatBuffer::toString() const { + + std::string strbuf; + + for( std::size_t i = this->position(); i < this->limit(); i++ ) { + strbuf.append( Float::valueOf( get( i ) ).toString() ); + } + + return strbuf; +} + +//////////////////////////////////////////////////////////////////////////////// +FloatBuffer& FloatBuffer::get( std::vector buffer ) + throw ( BufferUnderflowException ) { + + try{ + + if( !buffer.empty() ) { + this->get( &buffer[0], 0, buffer.size() ); + } + return *this; + } + DECAF_CATCH_RETHROW( BufferUnderflowException ) + DECAF_CATCH_EXCEPTION_CONVERT( Exception, BufferUnderflowException ) + DECAF_CATCHALL_THROW( BufferUnderflowException ) +} + +//////////////////////////////////////////////////////////////////////////////// +FloatBuffer& FloatBuffer::get( float* buffer, std::size_t offset, std::size_t length ) + throw( BufferUnderflowException, + lang::exceptions::NullPointerException ) { + + try{ + + if( length == 0 ) { + return *this; + } + + if( buffer == NULL ) { + throw NullPointerException( + __FILE__, __LINE__, + "FloatBuffer::get - Passed Buffer is Null" ); + } + + if( length > remaining() ) { + throw BufferUnderflowException( + __FILE__, __LINE__, + "FloatBuffer::get - Not enough data to fill length = %d", length ); + } + + for( std::size_t ix = 0; ix < length; ++ix ){ + buffer[offset + ix] = this->get(); + } + + return *this; + } + DECAF_CATCH_RETHROW( BufferUnderflowException ) + DECAF_CATCH_EXCEPTION_CONVERT( Exception, BufferUnderflowException ) + DECAF_CATCHALL_THROW( BufferUnderflowException ) +} + +//////////////////////////////////////////////////////////////////////////////// +FloatBuffer& FloatBuffer::put( FloatBuffer& src ) + throw( BufferOverflowException, ReadOnlyBufferException, + lang::exceptions::IllegalArgumentException ) { + + try{ + + if( this == &src ) { + throw IllegalArgumentException( + __FILE__, __LINE__, + "FloatBuffer::put - Can't put Self" ); + } + + if( this->isReadOnly() ) { + throw ReadOnlyBufferException( + __FILE__, __LINE__, + "FloatBuffer::put - This buffer is Read Only."); + } + + if( src.remaining() > this->remaining() ) { + throw BufferOverflowException( + __FILE__, __LINE__, + "FloatBuffer::put - Not enough space remaining to put src." ); + } + + while( src.hasRemaining() ) { + this->put( src.get() ); + } + + return *this; + } + DECAF_CATCH_RETHROW( BufferOverflowException ) + DECAF_CATCH_RETHROW( ReadOnlyBufferException ) + DECAF_CATCH_RETHROW( IllegalArgumentException ) + DECAF_CATCH_EXCEPTION_CONVERT( Exception, BufferOverflowException ) + DECAF_CATCHALL_THROW( BufferOverflowException ) +} + +//////////////////////////////////////////////////////////////////////////////// +FloatBuffer& FloatBuffer::put( const float* buffer, std::size_t offset, std::size_t length ) + throw( BufferOverflowException, ReadOnlyBufferException, + lang::exceptions::NullPointerException ) { + + try{ + + if( length == 0 ) { + return *this; + } + + if( this->isReadOnly() ) { + throw ReadOnlyBufferException( + __FILE__, __LINE__, + "FloatBuffer::put - This buffer is Read Only."); + } + + if( buffer == NULL ) { + throw NullPointerException( + __FILE__, __LINE__, + "FloatBuffer::put - Passed Buffer is Null."); + } + + if( length > this->remaining() ) { + throw BufferOverflowException( + __FILE__, __LINE__, + "FloatBuffer::put - Not Enough space to store requested Data."); + } + + // read length bytes starting from the offset + for( std::size_t ix = 0; ix < length; ++ix ) { + this->put( buffer[ix + offset] ); + } + + return *this; + } + DECAF_CATCH_RETHROW( BufferOverflowException ) + DECAF_CATCH_RETHROW( ReadOnlyBufferException ) + DECAF_CATCH_RETHROW( NullPointerException ) + DECAF_CATCH_EXCEPTION_CONVERT( Exception, BufferOverflowException ) + DECAF_CATCHALL_THROW( BufferOverflowException ) +} + +//////////////////////////////////////////////////////////////////////////////// +FloatBuffer& FloatBuffer::put( std::vector& buffer ) + throw( BufferOverflowException, ReadOnlyBufferException ) { + + try{ + + if( !buffer.empty() ) { + this->put( &buffer[0], 0, buffer.size() ); + } + + return *this; + } + DECAF_CATCH_RETHROW( BufferOverflowException ) + DECAF_CATCH_RETHROW( ReadOnlyBufferException ) + DECAF_CATCH_EXCEPTION_CONVERT( Exception, BufferOverflowException ) + DECAF_CATCHALL_THROW( BufferOverflowException ) +} + +//////////////////////////////////////////////////////////////////////////////// +int FloatBuffer::compareTo( const FloatBuffer& value ) const { + + int compareRemaining = Math::min( remaining(), value.remaining() ); + + std::size_t thisPos = this->position(); + std::size_t otherPos = value.position(); + float thisVal, otherVal; + + while( compareRemaining > 0 ) { + + thisVal = get( thisPos ); + otherVal = value.get( otherPos ); + + if( thisVal != otherVal ) { + return thisVal < otherVal ? -1 : 1; + } + + thisPos++; + otherPos++; + compareRemaining--; + } + + return remaining() - value.remaining(); +} + +//////////////////////////////////////////////////////////////////////////////// +bool FloatBuffer::equals( const FloatBuffer& value ) const { + + if( &value == this ) { + return true; + } + + if( this->remaining() != value.remaining() ) { + return false; + } + + std::size_t myPosition = this->position(); + std::size_t otherPosition = value.position(); + bool equalSoFar = true; + + while( equalSoFar && ( myPosition < this->limit() ) ) { + equalSoFar = get( myPosition++ ) == value.get( otherPosition++ ); + } + + return equalSoFar; +} + +//////////////////////////////////////////////////////////////////////////////// +bool FloatBuffer::operator==( const FloatBuffer& value ) const { + return this->equals( value ); +} + +//////////////////////////////////////////////////////////////////////////////// +bool FloatBuffer::operator<( const FloatBuffer& value ) const { + return this->compareTo( value ) < 0 ? true : false; +} Added: activemq/activemq-cpp/decaf/trunk/src/main/decaf/nio/FloatBuffer.h URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/decaf/trunk/src/main/decaf/nio/FloatBuffer.h?rev=600136&view=auto ============================================================================== --- activemq/activemq-cpp/decaf/trunk/src/main/decaf/nio/FloatBuffer.h (added) +++ activemq/activemq-cpp/decaf/trunk/src/main/decaf/nio/FloatBuffer.h Sat Dec 1 06:12:54 2007 @@ -0,0 +1,388 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _DECAF_NIO_FLOATBUFFER_H_ +#define _DECAF_NIO_FLOATBUFFER_H_ + +#include +#include +#include +#include +#include +#include +#include + +namespace decaf{ +namespace nio{ + + /** + * This class defines four categories of operations upon float buffers: + * + * o Absolute and relative get and put methods that read and write single floats; + * o Relative bulk get methods that transfer contiguous sequences of floats from + * this buffer into an array; and + * o Relative bulk put methods that transfer contiguous sequences of floats from a + * float array or some other float buffer into this buffer + * o Methods for compacting, duplicating, and slicing a float buffer. + * + * Double buffers can be created either by allocation, which allocates space for the + * buffer's content, by wrapping an existing float array into a buffer, or by + * creating a view of an existing byte buffer + * + * Methods in this class that do not otherwise have a value to return are specified + * to return the buffer upon which they are invoked. This allows method invocations + * to be chained. + */ + class FloatBuffer : public Buffer, + public lang::Comparable { + protected: + + /** + * Creates a FloatBuffer object that has its backing array allocated internally + * and is then owned and deleted when this object is deleted. The array is + * initially created with all elements initialized to zero. + * @param capacity - size and limit of the Buffer in doubles + */ + FloatBuffer( std::size_t capacity ); + + public: + + virtual ~FloatBuffer(); + + /** + * @returns a std::string describing this object + */ + virtual std::string toString() const; + + /** + * Returns the float array that backs this buffer (optional operation). + *

+ * Modifications to this buffer's content will cause the returned array's content + * to be modified, and vice versa. + *

+ * Invoke the hasArray method before invoking this method in order to ensure that + * this buffer has an accessible backing array. + * @returns the array that backs this Buffer + * @throws ReadOnlyBufferException if this Buffer is read only. + * @throws UnsupportedOperationException if the underlying store has no array. + */ + virtual float* array() + throw( decaf::lang::exceptions::UnsupportedOperationException, + ReadOnlyBufferException ) = 0; + + /** + * Returns the offset within this buffer's backing array of the first element of + * the buffer (optional operation). + *

+ * Invoke the hasArray method before invoking this method in order to ensure that + * this buffer has an accessible backing array. + * @returns The offset into the backing array where index zero starts. + * @throws ReadOnlyBufferException if this Buffer is read only. + * @throws UnsupportedOperationException if the underlying store has no array. + */ + virtual std::size_t arrayOffset() + throw( decaf::lang::exceptions::UnsupportedOperationException, + ReadOnlyBufferException ) = 0; + + /** + * Creates a new, read-only float buffer that shares this buffer's content. + *

+ * The content of the new buffer will be that of this buffer. Changes to this + * buffer's content will be visible in the new buffer; the new buffer itself, + * however, will be read-only and will not allow the shared content to be + * modified. The two buffers' position, limit, and mark values will be + * independent. + *

+ * If this buffer is itself read-only then this method behaves in exactly the + * same way as the duplicate method. + *

+ * The new buffer's capacity, limit, position, and mark values will be + * identical to those of this buffer. + * @return The new, read-only float buffer which the caller then owns. + */ + virtual FloatBuffer* asReadOnlyBuffer() const = 0; + + /** + * Compacts this buffer + *

+ * The bytes between the buffer's current position and its limit, if any, are + * copied to the beginning of the buffer. That is, the byte at index + * p = position() is copied to index zero, the byte at index p + 1 is copied + * to index one, and so forth until the byte at index limit() - 1 is copied + * to index n = limit() - 1 - p. The buffer's position is then set to n+1 and + * its limit is set to its capacity. The mark, if defined, is discarded. + *

+ * The buffer's position is set to the number of bytes copied, rather than to + * zero, so that an invocation of this method can be followed immediately by + * an invocation of another relative put method. + * @returns a reference to this FloatBuffer + * @throws ReadOnlyBufferException - If this buffer is read-only + */ + virtual FloatBuffer& compact() throw( ReadOnlyBufferException ) = 0; + + /** + * Creates a new float buffer that shares this buffer's content. + *

+ * The content of the new buffer will be that of this buffer. Changes to this + * buffer's content will be visible in the new buffer, and vice versa; the two + * buffers' position, limit, and mark values will be independent. + *

+ * The new buffer's capacity, limit, position, and mark values will be identical + * to those of this buffer. The new buffer will be read-only if, and only if, + * this buffer is read-only. + * @returns a new float Buffer which the caller owns. + */ + virtual FloatBuffer* duplicate() = 0; + + /** + * Relative get method. Reads the value at this buffer's current position, + * and then increments the position. + * @returns the float at the current position + * @throws BufferUnderflowException if there no more data to return + */ + virtual float get() throw ( BufferUnderflowException ) = 0; + + /** + * Absolute get method. Reads the value at the given index. + * @param index - the index in the Buffer where the float is to be read + * @returns the float that is located at the given index + * @throws IndexOutOfBoundsException - If index is not smaller than the + * buffer's limit + */ + virtual float get( std::size_t index ) const + throw ( lang::exceptions::IndexOutOfBoundsException ) = 0; + + /** + * Relative bulk get method. + *

+ * This method transfers values from this buffer into the given destination + * vector. An invocation of this method of the form src.get(a) behaves in + * exactly the same way as the invocation. The vector must be sized to the + * amount of data that is to be read, that is to say, the caller should call + * buffer.resize( N ) before calling this get method. + * @returns a reference to this Buffer + * @throws BufferUnderflowException - If there are fewer than length floats + * remaining in this buffer + */ + FloatBuffer& get( std::vector buffer ) + throw ( BufferUnderflowException ); + + /** + * Relative bulk get method. + *

+ * This method transfers floats from this buffer into the given destination array. + * If there are fewer floats remaining in the buffer than are required to satisfy + * the request, that is, if length > remaining(), then no bytes are transferred + * and a BufferUnderflowException is thrown. + *

+ * Otherwise, this method copies length floats from this buffer into the given + * array, starting at the current position of this buffer and at the given offset + * in the array. The position of this buffer is then incremented by length. + *

+ * @param buffer - pointer to an allocated buffer to fill + * @param offset - position in the buffer to start filling + * @param length - amount of data to put in the passed buffer + * @returns a reference to this Buffer + * @throws BufferUnderflowException - If there are fewer than length floats + * remaining in this buffer + * @throws NullPointerException if the passed buffer is null. + */ + FloatBuffer& get( float* buffer, std::size_t offset, std::size_t length ) + throw( BufferUnderflowException, + lang::exceptions::NullPointerException ); + + /** + * Tells whether or not this buffer is backed by an accessible float array. + * If this method returns true then the array and arrayOffset methods may safely + * be invoked. Subclasses should override this method if they do not have a + * backing array as this class always returns true. + * @returns true if, and only if, this buffer is backed by an array and is not + * read-only + */ + virtual bool hasArray() const = 0; + + /** + * This method transfers the floats remaining in the given source buffer into + * this buffer. If there are more floats remaining in the source buffer than in + * this buffer, that is, if src.remaining() > remaining(), then no floats are + * transferred and a BufferOverflowException is thrown. + *

+ * Otherwise, this method copies n = src.remaining() floats from the given + * buffer into this buffer, starting at each buffer's current position. The + * positions of both buffers are then incremented by n. + * @param src - the buffer to take floats from an place in this one. + * @returns a reference to this buffer + * @throws BufferOverflowException - If there is insufficient space in this + * buffer for the remaining floats in the source buffer + * @throws IllegalArgumentException - If the source buffer is this buffer + * @throws ReadOnlyBufferException - If this buffer is read-only + */ + FloatBuffer& put( FloatBuffer& src ) + throw( BufferOverflowException, ReadOnlyBufferException, + lang::exceptions::IllegalArgumentException ); + + /** + * This method transfers floats into this buffer from the given source array. + * If there are more floats to be copied from the array than remain in this buffer, + * that is, if length > remaining(), then no floats are transferred and a + * BufferOverflowException is thrown. + *

+ * Otherwise, this method copies length bytes 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. + * @param buffer- The array from which floats are to be read + * @param offset- The offset within the array of the first float to be read; + * @param length - The number of floats to be read from the given array + * @returns a reference to this buffer + * @throws BufferOverflowException - If there is insufficient space in this buffer + * @throws ReadOnlyBufferException - If this buffer is read-only + * @throws NullPointerException if the passed buffer is null. + */ + FloatBuffer& put( const float* buffer, std::size_t offset, std::size_t length ) + throw( BufferOverflowException, ReadOnlyBufferException, + lang::exceptions::NullPointerException ); + + /** + * This method transfers the entire content of the given source floats array into + * this buffer. This is the same as calling put( &buffer[0], 0, buffer.size() + * @pparam buffer - The buffer whose contents are copied to this FloatBuffer + * @returns a reference to this buffer + * @throws BufferOverflowException - If there is insufficient space in this buffer + * @throws ReadOnlyBufferException - If this buffer is read-only + */ + FloatBuffer& put( std::vector& buffer ) + throw( BufferOverflowException, ReadOnlyBufferException ); + + /** + * Writes the given floats into this buffer at the current position, and then + * increments the position. + * @param value - the floats value to be written + * @returns a reference to this buffer + * @throws BufferOverflowException - If this buffer's current position is not + * smaller than its limit + * @throws ReadOnlyBufferException - If this buffer is read-only + */ + virtual FloatBuffer& put( float value ) + throw( BufferOverflowException, ReadOnlyBufferException ) = 0; + + /** + * Writes the given floats into this buffer at the given index. + * @param index - position in the Buffer to write the data + * @param value - the floats to write. + * @returns a reference to this buffer + * @throws IndexOutOfBoundsException - If index greater than the buffer's limit + * minus the size of the type being written. + * @throws ReadOnlyBufferException - If this buffer is read-only + */ + virtual FloatBuffer& put( std::size_t index, float value ) + throw( lang::exceptions::IndexOutOfBoundsException, + ReadOnlyBufferException ) = 0; + + /** + * Creates a new FloatBuffer whose content is a shared subsequence of this + * buffer's content. The content of the new buffer will start at this buffer's + * current position. Changes to this buffer's content will be visible in the new + * buffer, and vice versa; the two buffers' position, limit, and mark values will + * be independent. + *

+ * The new buffer's position will be zero, its capacity and its limit will be the + * number of bytes remaining in this buffer, and its mark will be undefined. The + * new buffer will be read-only if, and only if, this buffer is read-only. + * @returns the newly create FloatBuffer which the caller owns. + */ + virtual FloatBuffer* slice() const = 0; + + public: // Comparable + + /** + * Compares this object with the specified object for order. Returns a + * negative integer, zero, or a positive integer as this object is less + * than, equal to, or greater than the specified object. + * @param value - the Object to be compared. + * @returns a negative integer, zero, or a positive integer as this + * object is less than, equal to, or greater than the specified object. + */ + virtual int compareTo( const FloatBuffer& value ) const; + + /** + * @return true if this value is considered equal to the passed value. + */ + virtual bool equals( const FloatBuffer& value ) const; + + /** + * Compares equality between this object and the one passed. + * @param value - the value to be compared to this one. + * @return true if this object is equal to the one passed. + */ + virtual bool operator==( const FloatBuffer& value ) const; + + /** + * Compares this object to another and returns true if this object + * is considered to be less than the one passed. This + * @param value - the value to be compared to this one. + * @return true if this object is equal to the one passed. + */ + virtual bool operator<( const FloatBuffer& value ) const; + + public: // Statics + + /** + * Allocates a new Double 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. + * @param capacity - The size of the Double buffer in floats + * @returns the FloatBuffer that was allocated, caller owns. + */ + static FloatBuffer* allocate( std::size_t capacity ); + + /** + * Wraps the passed buffer with a new FloatBuffer. + *

+ * The new buffer will be backed by the given float array; that is, modifications + * to the buffer will cause the array to be modified and vice versa. The new + * buffer's capacity will be array.length, its position will be offset, its limit + * will be offset + length, and its mark will be undefined. Its backing array + * will be the given array, and its array offset will be zero. + * @param buffer - The array that will back the new buffer + * @param offset - The offset of the subarray to be used + * @param length - The length of the subarray to be used + * @returns a new FloatBuffer that is backed by buffer, caller owns. + */ + static FloatBuffer* wrap( float* array, std::size_t offset, std::size_t length ) + throw( lang::exceptions::NullPointerException ); + + /** + * Wraps the passed STL float Vector in a FloatBuffer. + *

+ * The new buffer will be backed by the given float array; modifications to the + * buffer will cause the array to be modified and vice versa. The new buffer's + * capacity and limit will be buffer.size(), its position will be zero, and its + * mark will be undefined. Its backing array will be the given array, and its + * array offset will be zero. + * @param buffer - The vector that will back the new buffer, the vector must + * have been sized to the desired size already by calling vector.resize( N ). + * @returns a new FloatBuffer that is backed by buffer, caller owns. + */ + static FloatBuffer* wrap( std::vector& buffer ); + + }; + +}} + +#endif /*_DECAF_NIO_FLOATBUFFER_H_*/