1
0
mirror of https://github.com/VCMP-SqMod/SqMod.git synced 2024-11-08 08:47:17 +01:00
SqMod/module/Library/Format.hpp
2021-04-02 19:12:06 +03:00

80 lines
3.0 KiB
C++

#pragma once
// ------------------------------------------------------------------------------------------------
#include "Core/Utility.hpp"
// ------------------------------------------------------------------------------------------------
#include <fmt/args.h>
#include <fmt/format.h>
// ------------------------------------------------------------------------------------------------
namespace SqMod {
/* ------------------------------------------------------------------------------------------------
* Utility used to generate a formatted string with parameters from the VM stack.
*/
struct FormatContext
{
/* --------------------------------------------------------------------------------------------
* The type of container that will store the argument values.
*/
using Args = fmt::dynamic_format_arg_store< fmt::format_context >;
/* --------------------------------------------------------------------------------------------
* Format arguments container.
*/
Args mArgs{};
/* --------------------------------------------------------------------------------------------
* Script result status.
*/
SQInteger mRes{SQ_OK};
/* --------------------------------------------------------------------------------------------
* Output string buffer.
*/
String mOut{};
/* --------------------------------------------------------------------------------------------
* Default constructor.
*/
FormatContext() = default;
/* --------------------------------------------------------------------------------------------
* Copy constructor. (disabled)
*/
FormatContext(const FormatContext & o) = delete;
/* --------------------------------------------------------------------------------------------
* Move constructor. (disabled)
*/
FormatContext(FormatContext && o) = delete;
/* --------------------------------------------------------------------------------------------
* Destructor.
*/
~FormatContext() = default;
/* --------------------------------------------------------------------------------------------
* Copy assignment operator. (disabled)
*/
FormatContext & operator = (const FormatContext & o) = delete;
/* --------------------------------------------------------------------------------------------
* Move assignment operator. (disabled)
*/
FormatContext & operator = (FormatContext && o) = delete;
/* --------------------------------------------------------------------------------------------
* Process the formatted string.
*/
SQMOD_NODISCARD SQInteger Proc(HSQUIRRELVM vm, SQInteger text, SQInteger args, SQInteger end = -1);
};
/* ------------------------------------------------------------------------------------------------
* Helper function used to process a formatted string into the specified StackStrF instance.
*/
void ExtendedFormatProcess(StackStrF & ss, SQInteger top);
} // Namespace:: SqMod