blob: 5056dfba2fd9cdcea94b41dd3794fd98bae6b712 [file] [log] [blame]
/*
* 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_INTERNAL_NIO_BUFFERFACTORY_H_
#define _DECAF_INTERNAL_NIO_BUFFERFACTORY_H_
#include <decaf/nio/ByteBuffer.h>
#include <decaf/nio/CharBuffer.h>
#include <decaf/nio/DoubleBuffer.h>
#include <decaf/nio/FloatBuffer.h>
#include <decaf/nio/LongBuffer.h>
#include <decaf/nio/IntBuffer.h>
#include <decaf/nio/ShortBuffer.h>
#include <decaf/lang/exceptions/IndexOutOfBoundsException.h>
namespace decaf{
namespace internal{
namespace nio{
/**
* Factory class used by static methods in the decaf::nio package to
* create the various default version of the NIO interfaces.
*
* @since 1.0
*/
class DECAF_API BufferFactory {
public:
virtual ~BufferFactory() {}
/**
* Allocates a new byte buffer whose position will be zero its limit will
* be its capacity and its mark is not set.
*
* @param capacity
* The internal buffer's capacity.
*
* @return a newly allocated ByteBuffer which the caller owns.
*
* @throws IndexOutOfBoundsException if the capacity specified is negative.
*/
static decaf::nio::ByteBuffer* createByteBuffer( int capacity );
/**
* Wraps the passed buffer with a new ByteBuffer.
*
* The new buffer will be backed by the given byte 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 size
* The size of the specified buffer.
* @param offset
* The offset of the subarray to be used.
* @param length
* The length of the subarray to be used.
*
* @return a new ByteBuffer that is backed by buffer, caller owns the returned pointer.
*
* @throws NullPointerException if the buffer given in Null.
* @throws IndexOutOfBoundsException if the capacity specified is negative.
*/
static decaf::nio::ByteBuffer* createByteBuffer(
unsigned char* buffer, int size, int offset, int length );
/**
* Wraps the passed STL Byte Vector in a ByteBuffer.
*
* The new buffer will be backed by the given byte 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 ).
*
* @return a new ByteBuffer that is backed by buffer, caller owns.
*/
static decaf::nio::ByteBuffer* createByteBuffer( std::vector<unsigned char>& buffer );
/**
* Allocates a new char buffer whose position will be zero its limit will
* be its capacity and its mark is not set.
*
* @param capacity
* The internal buffer's capacity.
*
* @return a newly allocated CharBuffer which the caller owns.
*
* @throws IndexOutOfBoundsException if the capacity specified is negative.
*/
static decaf::nio::CharBuffer* createCharBuffer( int capacity );
/**
* Wraps the passed buffer with a new CharBuffer.
*
* The new buffer will be backed by the given byte 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 size
* The size of the specified buffer.
* @param offset
* The offset of the subarray to be used.
* @param length
* The length of the subarray to be used.
*
* @return a new CharBuffer that is backed by buffer, caller owns the returned pointer.
*
* @throws NullPointerException if the buffer given in Null.
* @throws IndexOutOfBoundsException if the capacity specified is negative.
*/
static decaf::nio::CharBuffer* createCharBuffer( char* buffer, int size, int offset, int length );
/**
* Wraps the passed STL Byte Vector in a CharBuffer.
*
* The new buffer will be backed by the given byte 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 ).
*
* @return a new CharBuffer that is backed by buffer, caller owns.
*/
static decaf::nio::CharBuffer* createCharBuffer( std::vector<char>& buffer );
/**
* Allocates a new double buffer whose position will be zero its limit will
* be its capacity and its mark is not set.
*
* @param capacity
* The internal buffer's capacity.
*
* @return a newly allocated DoubleBuffer which the caller owns.
*
* @throws IndexOutOfBoundsException if the capacity specified is negative.
*/
static decaf::nio::DoubleBuffer* createDoubleBuffer( int capacity );
/**
* Wraps the passed buffer with a new DoubleBuffer.
*
* The new buffer will be backed by the given byte 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 size
* The size of the specified buffer.
* @param offset
* The offset of the subarray to be used.
* @param length
* The length of the subarray to be used.
*
* @return a new DoubleBuffer that is backed by buffer, caller owns the returned pointer.
*
* @throws NullPointerException if the buffer given in Null.
* @throws IndexOutOfBoundsException if the capacity specified is negative.
*/
static decaf::nio::DoubleBuffer* createDoubleBuffer( double* buffer, int size, int offset, int length );
/**
* Wraps the passed STL Double Vector in a DoubleBuffer.
*
* The new buffer will be backed by the given byte 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 ).
*
* @return a new DoubleBuffer that is backed by buffer, caller owns.
*/
static decaf::nio::DoubleBuffer* createDoubleBuffer( std::vector<double>& buffer );
/**
* Allocates a new float buffer whose position will be zero its limit will
* be its capacity and its mark is not set.
*
* @param capacity
* The internal buffer's capacity.
*
* @return a newly allocated FloatBuffer which the caller owns.
*
* @throws IndexOutOfBoundsException if the capacity specified is negative.
*/
static decaf::nio::FloatBuffer* createFloatBuffer( int capacity );
/**
* Wraps the passed buffer with a new FloatBuffer.
*
* The new buffer will be backed by the given byte 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 size
* The size of the specified buffer.
* @param offset
* The offset of the subarray to be used.
* @param length
* The length of the subarray to be used.
*
* @return a new FloatBuffer that is backed by buffer, caller owns the returned pointer.
*
* @throws NullPointerException if the buffer given in Null.
* @throws IndexOutOfBoundsException if the capacity specified is negative.
*/
static decaf::nio::FloatBuffer* createFloatBuffer( float* buffer, int size, int offset, int length );
/**
* Wraps the passed STL Float Vector in a FloatBuffer.
*
* The new buffer will be backed by the given byte 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 ).
*
* @return a new FloatBuffer that is backed by buffer, caller owns.
*/
static decaf::nio::FloatBuffer* createFloatBuffer( std::vector<float>& buffer );
/**
* Allocates a new long long buffer whose position will be zero its limit will
* be its capacity and its mark is not set.
* @param capacity - the internal buffer's capacity.
* @return a newly allocated DoubleBuffer which the caller owns.
*
* @throws IndexOutOfBoundsException if the capacity specified is negative.
*/
static decaf::nio::LongBuffer* createLongBuffer( int capacity );
/**
* Wraps the passed buffer with a new LongBuffer.
*
* The new buffer will be backed by the given byte 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 size
* The size of the specified buffer.
* @param offset
* The offset of the subarray to be used.
* @param length
* The length of the subarray to be used.
*
* @return a new LongBuffer that is backed by buffer, caller owns the returned pointer.
*
* @throws NullPointerException if the buffer given in Null.
* @throws IndexOutOfBoundsException if the capacity specified is negative.
*/
static decaf::nio::LongBuffer* createLongBuffer( long long* buffer, int size, int offset, int length );
/**
* Wraps the passed STL Long Vector in a LongBuffer.
*
* The new buffer will be backed by the given byte 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 ).
*
* @return a new LongBuffer that is backed by buffer, caller owns.
*/
static decaf::nio::LongBuffer* createLongBuffer( std::vector<long long>& buffer );
/**
* Allocates a new int buffer whose position will be zero its limit will
* be its capacity and its mark is not set.
*
* @param capacity
* The internal buffer's capacity.
*
* @return a newly allocated IntBuffer which the caller owns.
*
* @throws IndexOutOfBoundsException if the capacity specified is negative.
*/
static decaf::nio::IntBuffer* createIntBuffer( int capacity );
/**
* Wraps the passed buffer with a new IntBuffer.
*
* The new buffer will be backed by the given byte 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 size
* The size of the specified buffer.
* @param offset
* The offset of the subarray to be used.
* @param length
* The length of the subarray to be used.
*
* @return a new IntBuffer that is backed by buffer, caller owns the returned pointer.
*
* @throws NullPointerException if the buffer given in Null.
* @throws IndexOutOfBoundsException if the capacity specified is negative.
*/
static decaf::nio::IntBuffer* createIntBuffer( int* buffer, int size, int offset, int length );
/**
* Wraps the passed STL int Vector in a IntBuffer.
*
* The new buffer will be backed by the given byte 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 ).
*
* @return a new IntBuffer that is backed by buffer, caller owns.
*/
static decaf::nio::IntBuffer* createIntBuffer( std::vector<int>& buffer );
/**
* Allocates a new short buffer whose position will be zero its limit will
* be its capacity and its mark is not set.
*
* @param capacity
* The internal buffer's capacity.
*
* @return a newly allocated ShortBuffer which the caller owns.
*
* @throws IndexOutOfBoundsException if the capacity specified is negative.
*/
static decaf::nio::ShortBuffer* createShortBuffer( int capacity );
/**
* Wraps the passed buffer with a new ShortBuffer.
*
* The new buffer will be backed by the given byte 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 size
* The size of the specified buffer.
* @param offset
* The offset of the subarray to be used.
* @param length
* The length of the subarray to be used.
*
* @return a new ShortBuffer that is backed by buffer, caller owns the returned pointer.
*
* @throws NullPointerException if the buffer given in Null.
* @throws IndexOutOfBoundsException if the capacity specified is negative.
*/
static decaf::nio::ShortBuffer* createShortBuffer( short* buffer, int size, int offset, int length );
/**
* Wraps the passed STL Short Vector in a ShortBuffer.
*
* The new buffer will be backed by the given byte 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 ).
*
* @return a new DoubleBuffer that is backed by buffer, caller owns.
*/
static decaf::nio::ShortBuffer* createShortBuffer( std::vector<short>& buffer );
};
}}}
#endif /*_DECAF_INTERNAL_NIO_BUFFERFACTORY_H_*/