mirror of
https://github.com/Halofreak1990/XFXFramework
synced 2024-12-26 13:49:34 +01:00
Replaced all copyright symbols with (c) to improve cross-platform reading Added classes to XFX::Audio namespace Added and updated classes in XFX::Graphics namespace Updated event function signature Replaced const char* ToString() with const String& ToString()
113 lines
3.0 KiB
C++
113 lines
3.0 KiB
C++
/********************************************************
|
|
* Buffer.h *
|
|
* *
|
|
* XFX Buffer class definition file *
|
|
* Copyright (c) XFX Team. All Rights Reserved *
|
|
********************************************************/
|
|
#ifndef _SYSTEM_BUFFER_
|
|
#define _SYSTEM_BUFFER_
|
|
|
|
#include "Types.h"
|
|
|
|
#if DEBUG
|
|
#include <stdio.h>
|
|
#endif
|
|
|
|
namespace System
|
|
{
|
|
// Manipulates arrays of primitive types.
|
|
class Buffer
|
|
{
|
|
public:
|
|
template <class T>
|
|
static void BlockCopy(const T src[], const int srcOffset, T dst[], const int dstOffset, const int count)
|
|
{
|
|
if (!src)
|
|
{
|
|
#if DEBUG
|
|
printf("ARGUMENT_NULL in function %s, at line %i in file %s, argument \"%s\"\n", __FUNCTION__, __LINE__, __FILE__, "src");
|
|
#endif
|
|
return;
|
|
}
|
|
|
|
if (!dst)
|
|
{
|
|
#if DEBUG
|
|
printf("ARGUMENT_NULL in function %s, at line %i in file %s, argument \"%s\"\n", __FUNCTION__, __LINE__, __FILE__, "dst");
|
|
#endif
|
|
return;
|
|
}
|
|
|
|
if (srcOffset < 0)
|
|
{
|
|
#if DEBUG
|
|
printf("ARGUMENT_OUT_OF_RANGE in function %s, at line %i in file %s, argument \"%s\": %s\n", __FUNCTION__, __LINE__, __FILE__, "srcOffset", "Non-negative number required.");
|
|
#endif
|
|
return;
|
|
}
|
|
|
|
if (dstOffset < 0)
|
|
{
|
|
#if DEBUG
|
|
printf("ARGUMENT_OUT_OF_RANGE in function %s, at line %i in file %s, argument \"%s\": %s\n", __FUNCTION__, __LINE__, __FILE__, "dstOffset", "Non-negative number required.");
|
|
#endif
|
|
return;
|
|
}
|
|
|
|
if (count < 0)
|
|
{
|
|
#if DEBUG
|
|
printf("ARGUMENT_OUT_OF_RANGE in function %s, at line %i in file %s, argument \"%s\": %s\n", __FUNCTION__, __LINE__, __FILE__, "count", "Non-negative number required.");
|
|
#endif
|
|
return;
|
|
}
|
|
|
|
if ((srcOffset > ByteLength(src) - count) || (dstOffset > ByteLength(dst) - count))
|
|
{
|
|
#if DEBUG
|
|
printf("ARGUMENT in function %s, at line %i in file %s: %s\n", __FUNCTION__, __LINE__, __FILE__, "Offset and length were out of bounds for the array or count is greater than the number of elements from index to the end of the source collection.");
|
|
#endif
|
|
return;
|
|
}
|
|
|
|
for(int i = srcOffset, j = dstOffset; i < (srcOffset + count); i++, j++)
|
|
{
|
|
dst[j] = src[i];
|
|
}
|
|
}
|
|
|
|
template <class T>
|
|
static int ByteLength(const T array[])
|
|
{
|
|
return sizeof(array);
|
|
}
|
|
|
|
template <class T>
|
|
static byte GetByte(const T array[], const int index)
|
|
{
|
|
if (index < 0 || index >= ByteLength(array))
|
|
{
|
|
#if DEBUG
|
|
printf("ARGUMENT_OUT_OF_RANGE in function %s, at line %i in file %s, argument \"%s\": %s\n", __FUNCTION__, __LINE__, __FILE__, "index", "Value must be non-negative and less than the size of the collection.");
|
|
#endif
|
|
}
|
|
|
|
return ((byte *) &array[index]);
|
|
}
|
|
|
|
template <class T>
|
|
static void SetByte(T array[], const int index, const byte value)
|
|
{
|
|
if (index < 0 || index >= ByteLength(array))
|
|
{
|
|
#if DEBUG
|
|
printf("ARGUMENT_OUT_OF_RANGE in function %s, at line %i in file %s, argument \"%s\": %s\n", __FUNCTION__, __LINE__, __FILE__, "index", "Value must be non-negative and less than the size of the collection.");
|
|
#endif
|
|
return;
|
|
}
|
|
}
|
|
};
|
|
}
|
|
|
|
#endif //_SYSTEM_BUFFER_
|