diff --git a/include/SFML/System.h b/include/SFML/System.h index ec89663..c5d7636 100644 --- a/include/SFML/System.h +++ b/include/SFML/System.h @@ -30,6 +30,7 @@ //////////////////////////////////////////////////////////// #include +#include #include #include #include diff --git a/include/SFML/System/Buffer.h b/include/SFML/System/Buffer.h new file mode 100644 index 0000000..0b9540d --- /dev/null +++ b/include/SFML/System/Buffer.h @@ -0,0 +1,73 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2023 Laurent Gomila (laurent@sfml-dev.org) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_BUFFER_H +#define SFML_BUFFER_H + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include + + +//////////////////////////////////////////////////////////// +/// \brief Create an empty buffer +/// +/// \return A new sfBuffer object, or NULL if it failed +/// +//////////////////////////////////////////////////////////// +CSFML_SYSTEM_API sfBuffer* sfBuffer_create(void); + +//////////////////////////////////////////////////////////// +/// \brief Destroy an existing buffer +/// +/// \param buffer Buffer to delete +/// +//////////////////////////////////////////////////////////// +CSFML_SYSTEM_API void sfBuffer_destroy(sfBuffer* buffer); + +//////////////////////////////////////////////////////////// +/// \brief Return the size of a buffer +/// +/// \param buffer Buffer object +/// +/// \return Size in bytes +/// +//////////////////////////////////////////////////////////// +CSFML_SYSTEM_API size_t sfBuffer_getSize(const sfBuffer* buffer); + +//////////////////////////////////////////////////////////// +/// \brief Get a read-only pointer to the array of bytes of a buffer +/// +/// \param buffer Buffer object +/// +/// \return Read-only pointer to the array of bytes +/// +//////////////////////////////////////////////////////////// +CSFML_SYSTEM_API const sfUint8* sfBuffer_getData(const sfBuffer* buffer); + + +#endif // SFML_BUFFER_H diff --git a/include/SFML/System/Types.h b/include/SFML/System/Types.h index c9696d0..a41a9ab 100644 --- a/include/SFML/System/Types.h +++ b/include/SFML/System/Types.h @@ -26,6 +26,7 @@ #define SFML_SYSTEM_TYPES_H +typedef struct sfBuffer sfBuffer; typedef struct sfClock sfClock; typedef struct sfMutex sfMutex; typedef struct sfThread sfThread; diff --git a/src/SFML/System/Buffer.cpp b/src/SFML/System/Buffer.cpp new file mode 100644 index 0000000..1ba71b4 --- /dev/null +++ b/src/SFML/System/Buffer.cpp @@ -0,0 +1,60 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2023 Laurent Gomila (laurent@sfml-dev.org) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include + + +//////////////////////////////////////////////////////////// +sfBuffer* sfBuffer_create(void) +{ + return new sfBuffer; +} + + +//////////////////////////////////////////////////////////// +void sfBuffer_destroy(sfBuffer* buffer) +{ + delete buffer; +} + + +//////////////////////////////////////////////////////////// +size_t sfBuffer_getSize(const sfBuffer* buffer) +{ + CSFML_CHECK_RETURN(buffer, 0); + return buffer->buffer.size(); +} + + +//////////////////////////////////////////////////////////// +const sfUint8* sfBuffer_getData(const sfBuffer* buffer) +{ + CSFML_CHECK_RETURN(buffer, NULL); + return !buffer->buffer.empty() ? &buffer->buffer[0] : NULL; +} diff --git a/src/SFML/System/BufferStruct.h b/src/SFML/System/BufferStruct.h new file mode 100644 index 0000000..ffa814f --- /dev/null +++ b/src/SFML/System/BufferStruct.h @@ -0,0 +1,44 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2023 Laurent Gomila (laurent@sfml-dev.org) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_BUFFERSTRUCT_H +#define SFML_BUFFERSTRUCT_H + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include + + +//////////////////////////////////////////////////////////// +// Internal structure of sfBuffer +//////////////////////////////////////////////////////////// +struct sfBuffer +{ + std::vector buffer; +}; + + +#endif // SFML_BUFFERSTRUCT_H diff --git a/src/SFML/System/CMakeLists.txt b/src/SFML/System/CMakeLists.txt index e254a57..2ea169c 100644 --- a/src/SFML/System/CMakeLists.txt +++ b/src/SFML/System/CMakeLists.txt @@ -6,6 +6,9 @@ set(SRCROOT ${PROJECT_SOURCE_DIR}/src/SFML/System) set(SRC ${PROJECT_SOURCE_DIR}/include/SFML/GPUPreference.h ${INCROOT}/Export.h + ${SRCROOT}/Buffer.cpp + ${SRCROOT}/BufferStruct.h + ${INCROOT}/Buffer.h ${SRCROOT}/Clock.cpp ${SRCROOT}/ClockStruct.h ${INCROOT}/Clock.h