Changeset - r27364:db69a5f5c496
[Not reviewed]
master
0 39 0
Rubidium - 19 months ago 2023-05-05 21:19:35
rubidium@openttd.org
Codechange: use std::string as script API return type
39 files changed with 83 insertions and 83 deletions:
0 comments (0 inline, 0 general)
src/script/api/script_basestation.cpp
Show inline comments
 
@@ -26,9 +26,9 @@
 
	return st != nullptr && (st->owner == ScriptObject::GetCompany() || ScriptCompanyMode::IsDeity() || st->owner == OWNER_NONE);
 
}
 

	
 
/* static */ char *ScriptBaseStation::GetName(StationID station_id)
 
/* static */ std::optional<std::string> ScriptBaseStation::GetName(StationID station_id)
 
{
 
	if (!IsValidBaseStation(station_id)) return nullptr;
 
	if (!IsValidBaseStation(station_id)) return std::nullopt;
 

	
 
	::SetDParam(0, station_id);
 
	return GetString(::Station::IsValidID(station_id) ? STR_STATION_NAME : STR_WAYPOINT_NAME);
src/script/api/script_basestation.hpp
Show inline comments
 
@@ -43,7 +43,7 @@ public:
 
	 * @pre IsValidBaseStation(station_id).
 
	 * @return The name of the station.
 
	 */
 
	static char *GetName(StationID station_id);
 
	static std::optional<std::string> GetName(StationID station_id);
 

	
 
	/**
 
	 * Set the name this basestation.
src/script/api/script_bridge.cpp
Show inline comments
 
@@ -129,10 +129,10 @@ static void _DoCommandReturnBuildBridge1
 
	return ScriptObject::Command<CMD_LANDSCAPE_CLEAR>::Do(tile);
 
}
 

	
 
/* static */ char *ScriptBridge::GetName(BridgeID bridge_id, ScriptVehicle::VehicleType vehicle_type)
 
/* static */ std::optional<std::string> ScriptBridge::GetName(BridgeID bridge_id, ScriptVehicle::VehicleType vehicle_type)
 
{
 
	EnforcePrecondition(nullptr, vehicle_type == ScriptVehicle::VT_ROAD || vehicle_type == ScriptVehicle::VT_RAIL || vehicle_type == ScriptVehicle::VT_WATER);
 
	if (!IsValidBridge(bridge_id)) return nullptr;
 
	EnforcePrecondition(std::nullopt, vehicle_type == ScriptVehicle::VT_ROAD || vehicle_type == ScriptVehicle::VT_RAIL || vehicle_type == ScriptVehicle::VT_WATER);
 
	if (!IsValidBridge(bridge_id)) return std::nullopt;
 

	
 
	return GetString(vehicle_type == ScriptVehicle::VT_WATER ? STR_LAI_BRIDGE_DESCRIPTION_AQUEDUCT : ::GetBridgeSpec(bridge_id)->transport_name[vehicle_type]);
 
}
src/script/api/script_bridge.hpp
Show inline comments
 
@@ -69,7 +69,7 @@ public:
 
	 * @pre vehicle_type == ScriptVehicle::VT_ROAD || vehicle_type == ScriptVehicle::VT_RAIL || vehicle_type == ScriptVehicle::VT_WATER
 
	 * @return The name the bridge has.
 
	 */
 
	static char *GetName(BridgeID bridge_id, ScriptVehicle::VehicleType vehicle_type);
 
	static std::optional<std::string> GetName(BridgeID bridge_id, ScriptVehicle::VehicleType vehicle_type);
 

	
 
	/**
 
	 * Get the maximum speed of a bridge.
src/script/api/script_cargo.cpp
Show inline comments
 
@@ -28,26 +28,25 @@
 
	return (towneffect_type >= (TownEffect)TE_BEGIN && towneffect_type < (TownEffect)TE_END);
 
}
 

	
 
/* static */ char *ScriptCargo::GetName(CargoID cargo_type)
 
/* static */ std::optional<std::string> ScriptCargo::GetName(CargoID cargo_type)
 
{
 
	if (!IsValidCargo(cargo_type)) return nullptr;
 
	if (!IsValidCargo(cargo_type)) return std::nullopt;
 

	
 
	::SetDParam(0, 1ULL << cargo_type);
 
	return GetString(STR_JUST_CARGO_LIST);
 
}
 

	
 
/* static */ char *ScriptCargo::GetCargoLabel(CargoID cargo_type)
 
/* static */ std::optional<std::string> ScriptCargo::GetCargoLabel(CargoID cargo_type)
 
{
 
	if (!IsValidCargo(cargo_type)) return nullptr;
 
	if (!IsValidCargo(cargo_type)) return std::nullopt;
 
	const CargoSpec *cargo = ::CargoSpec::Get(cargo_type);
 

	
 
	/* cargo->label is a uint32 packing a 4 character non-terminated string,
 
	 * like "PASS", "COAL", "OIL_". New ones can be defined by NewGRFs */
 
	char *cargo_label = MallocT<char>(sizeof(cargo->label) + 1);
 
	std::string cargo_label;
 
	for (uint i = 0; i < sizeof(cargo->label); i++) {
 
		cargo_label[i] = GB(cargo->label, (uint8)(sizeof(cargo->label) - i - 1) * 8, 8);
 
		cargo_label.push_back(GB(cargo->label, (uint8)(sizeof(cargo->label) - i - 1) * 8, 8));
 
	}
 
	cargo_label[sizeof(cargo->label)] = '\0';
 
	return cargo_label;
 
}
 

	
src/script/api/script_cargo.hpp
Show inline comments
 
@@ -90,7 +90,7 @@ public:
 
	 * @pre IsValidCargo(cargo_type).
 
	 * @return The name of the cargo type.
 
	 */
 
	static char *GetName(CargoID cargo_type);
 
	static std::optional<std::string> GetName(CargoID cargo_type);
 

	
 
	/**
 
	 * Gets the string representation of the cargo label.
 
@@ -107,7 +107,7 @@ public:
 
	 *  - In other words: Only use the cargo label, if you know more about the behaviour
 
	 *    of a specific cargo from a specific industry set, than the API methods can tell you.
 
	 */
 
	static char *GetCargoLabel(CargoID cargo_type);
 
	static std::optional<std::string> GetCargoLabel(CargoID cargo_type);
 

	
 
	/**
 
	 * Checks whether the give cargo is a freight or not.
src/script/api/script_client.cpp
Show inline comments
 
@@ -32,11 +32,11 @@ static NetworkClientInfo *FindClientInfo
 
	return (FindClientInfo(client) == nullptr ? ScriptClient::CLIENT_INVALID : client);
 
}
 

	
 
/* static */ char *ScriptClient::GetName(ScriptClient::ClientID client)
 
/* static */ std::optional<std::string> ScriptClient::GetName(ScriptClient::ClientID client)
 
{
 
	NetworkClientInfo *ci = FindClientInfo(client);
 
	if (ci == nullptr) return nullptr;
 
	return stredup(ci->client_name.c_str());
 
	if (ci == nullptr) return std::nullopt;
 
	return ci->client_name;
 
}
 

	
 
/* static */ ScriptCompany::CompanyID ScriptClient::GetCompany(ScriptClient::ClientID client)
src/script/api/script_client.hpp
Show inline comments
 
@@ -45,7 +45,7 @@ public:
 
	 * @pre ResolveClientID(client) != CLIENT_INVALID.
 
	 * @return The name of the given client.
 
	 */
 
	static char *GetName(ClientID client);
 
	static std::optional<std::string> GetName(ClientID client);
 

	
 
	/**
 
	 * Get the company in which the given client is playing.
src/script/api/script_company.cpp
Show inline comments
 
@@ -57,10 +57,10 @@
 
	return ScriptObject::Command<CMD_RENAME_COMPANY>::Do(text);
 
}
 

	
 
/* static */ char *ScriptCompany::GetName(ScriptCompany::CompanyID company)
 
/* static */ std::optional<std::string> ScriptCompany::GetName(ScriptCompany::CompanyID company)
 
{
 
	company = ResolveCompanyID(company);
 
	if (company == COMPANY_INVALID) return nullptr;
 
	if (company == COMPANY_INVALID) return std::nullopt;
 

	
 
	::SetDParam(0, company);
 
	return GetString(STR_COMPANY_NAME);
 
@@ -79,20 +79,13 @@
 
	return ScriptObject::Command<CMD_RENAME_PRESIDENT>::Do(text);
 
}
 

	
 
/* static */ char *ScriptCompany::GetPresidentName(ScriptCompany::CompanyID company)
 
/* static */ std::optional<std::string> ScriptCompany::GetPresidentName(ScriptCompany::CompanyID company)
 
{
 
	company = ResolveCompanyID(company);
 
	if (company == COMPANY_INVALID) return std::nullopt;
 

	
 
	static const int len = 64;
 
	char *president_name = MallocT<char>(len);
 
	if (company != COMPANY_INVALID) {
 
		::SetDParam(0, company);
 
		::GetString(president_name, STR_PRESIDENT_NAME, &president_name[len - 1]);
 
	} else {
 
		*president_name = '\0';
 
	}
 

	
 
	return president_name;
 
	::SetDParam(0, company);
 
	return GetString(STR_PRESIDENT_NAME);
 
}
 

	
 
/* static */ bool ScriptCompany::SetPresidentGender(Gender gender)
src/script/api/script_company.hpp
Show inline comments
 
@@ -150,7 +150,7 @@ public:
 
	 * @pre ResolveCompanyID(company) != COMPANY_INVALID.
 
	 * @return The name of the given company.
 
	 */
 
	static char *GetName(CompanyID company);
 
	static std::optional<std::string> GetName(CompanyID company);
 

	
 
	/**
 
	 * Set the name of your president.
 
@@ -168,7 +168,7 @@ public:
 
	 * @pre ResolveCompanyID(company) != COMPANY_INVALID.
 
	 * @return The name of the president of the given company.
 
	 */
 
	static char *GetPresidentName(CompanyID company);
 
	static std::optional<std::string> GetPresidentName(CompanyID company);
 

	
 
	/**
 
	 * Set the gender of the president of your company.
src/script/api/script_engine.cpp
Show inline comments
 
@@ -41,9 +41,9 @@
 
	return e != nullptr && ::IsEngineBuildable(engine_id, e->type, ScriptObject::GetCompany());
 
}
 

	
 
/* static */ char *ScriptEngine::GetName(EngineID engine_id)
 
/* static */ std::optional<std::string> ScriptEngine::GetName(EngineID engine_id)
 
{
 
	if (!IsValidEngine(engine_id)) return nullptr;
 
	if (!IsValidEngine(engine_id)) return std::nullopt;
 

	
 
	::SetDParam(0, engine_id);
 
	return GetString(STR_ENGINE_NAME);
src/script/api/script_engine.hpp
Show inline comments
 
@@ -44,7 +44,7 @@ public:
 
	 * @pre IsValidEngine(engine_id).
 
	 * @return The name the engine has.
 
	 */
 
	static char *GetName(EngineID engine_id);
 
	static std::optional<std::string> GetName(EngineID engine_id);
 

	
 
	/**
 
	 * Get the cargo-type of an engine. In case it can transport multiple cargoes, it
src/script/api/script_error.cpp
Show inline comments
 
@@ -23,9 +23,9 @@ ScriptError::ScriptErrorMapString Script
 
	return ScriptObject::GetLastError();
 
}
 

	
 
/* static */ char *ScriptError::GetLastErrorString()
 
/* static */ std::optional<std::string> ScriptError::GetLastErrorString()
 
{
 
	return stredup((*error_map_string.find(ScriptError::GetLastError())).second);
 
	return (*error_map_string.find(ScriptError::GetLastError())).second;
 
}
 

	
 
/* static */ ScriptErrorType ScriptError::StringToError(StringID internal_string_id)
src/script/api/script_error.hpp
Show inline comments
 
@@ -193,7 +193,7 @@ public:
 
	 * Get the last error in string format (for human readability).
 
	 * @return An ErrorMessage enum item, as string.
 
	 */
 
	static char *GetLastErrorString();
 
	static std::optional<std::string> GetLastErrorString();
 

	
 
	/**
 
	 * Get the error based on the OpenTTD StringID.
src/script/api/script_event_types.cpp
Show inline comments
 
@@ -28,9 +28,9 @@ bool ScriptEventEnginePreview::IsEngineV
 
	return e != nullptr && e->IsEnabled();
 
}
 

	
 
char *ScriptEventEnginePreview::GetName()
 
std::optional<std::string> ScriptEventEnginePreview::GetName()
 
{
 
	if (!this->IsEngineValid()) return nullptr;
 
	if (!this->IsEngineValid()) return std::nullopt;
 

	
 
	::SetDParam(0, this->engine);
 
	return GetString(STR_ENGINE_NAME);
src/script/api/script_event_types.hpp
Show inline comments
 
@@ -239,7 +239,7 @@ public:
 
	 * Get the name of the offered engine.
 
	 * @return The name the engine has.
 
	 */
 
	char *GetName();
 
	std::optional<std::string> GetName();
 

	
 
	/**
 
	 * Get the cargo-type of the offered engine. In case it can transport multiple cargoes, it
src/script/api/script_group.cpp
Show inline comments
 
@@ -68,9 +68,9 @@
 
	return ScriptObject::Command<CMD_ALTER_GROUP>::Do(AlterGroupMode::Rename, group_id, 0, text);
 
}
 

	
 
/* static */ char *ScriptGroup::GetName(GroupID group_id)
 
/* static */ std::optional<std::string> ScriptGroup::GetName(GroupID group_id)
 
{
 
	if (!IsValidGroup(group_id)) return nullptr;
 
	if (!IsValidGroup(group_id)) return std::nullopt;
 

	
 
	::SetDParam(0, group_id);
 
	return GetString(STR_GROUP_NAME);
src/script/api/script_group.hpp
Show inline comments
 
@@ -84,7 +84,7 @@ public:
 
	 * @pre IsValidGroup(group_id).
 
	 * @return The name the group has.
 
	 */
 
	static char *GetName(GroupID group_id);
 
	static std::optional<std::string> GetName(GroupID group_id);
 

	
 
	/**
 
	 * Set parent group of a group.
src/script/api/script_industry.cpp
Show inline comments
 
@@ -42,9 +42,9 @@
 
	return ::GetIndustryIndex(tile);
 
}
 

	
 
/* static */ char *ScriptIndustry::GetName(IndustryID industry_id)
 
/* static */ std::optional<std::string> ScriptIndustry::GetName(IndustryID industry_id)
 
{
 
	if (!IsValidIndustry(industry_id)) return nullptr;
 
	if (!IsValidIndustry(industry_id)) return std::nullopt;
 

	
 
	::SetDParam(0, industry_id);
 
	return GetString(STR_INDUSTRY_NAME);
src/script/api/script_industry.hpp
Show inline comments
 
@@ -79,7 +79,7 @@ public:
 
	 * @pre IsValidIndustry(industry_id).
 
	 * @return The name of the industry.
 
	 */
 
	static char *GetName(IndustryID industry_id);
 
	static std::optional<std::string> GetName(IndustryID industry_id);
 

	
 
	/**
 
	 * Set the custom text of an industry, shown in the GUI.
src/script/api/script_industrytype.cpp
Show inline comments
 
@@ -57,9 +57,9 @@
 
	return ::GetIndustrySpec(industry_type)->GetConstructionCost();
 
}
 

	
 
/* static */ char *ScriptIndustryType::GetName(IndustryType industry_type)
 
/* static */ std::optional<std::string> ScriptIndustryType::GetName(IndustryType industry_type)
 
{
 
	if (!IsValidIndustryType(industry_type)) return nullptr;
 
	if (!IsValidIndustryType(industry_type)) return std::nullopt;
 

	
 
	return GetString(::GetIndustrySpec(industry_type)->name);
 
}
src/script/api/script_industrytype.hpp
Show inline comments
 
@@ -39,7 +39,7 @@ public:
 
	 * @pre IsValidIndustryType(industry_type).
 
	 * @return The name of an industry.
 
	 */
 
	static char *GetName(IndustryType industry_type);
 
	static std::optional<std::string> GetName(IndustryType industry_type);
 

	
 
	/**
 
	 * Get a list of CargoID possible produced by this industry-type.
src/script/api/script_newgrf.cpp
Show inline comments
 
@@ -50,15 +50,15 @@ ScriptNewGRFList::ScriptNewGRFList()
 
	return 0;
 
}
 

	
 
/* static */ char *ScriptNewGRF::GetName(SQInteger grfid)
 
/* static */ std::optional<std::string> ScriptNewGRF::GetName(SQInteger grfid)
 
{
 
	grfid = BSWAP32(GB(grfid, 0, 32)); // Match people's expectations.
 

	
 
	for (auto c = _grfconfig; c != nullptr; c = c->next) {
 
		if (!HasBit(c->flags, GCF_STATIC) && c->ident.grfid == grfid) {
 
			return ::stredup(c->GetName());
 
			return c->GetName();
 
		}
 
	}
 

	
 
	return nullptr;
 
	return std::nullopt;
 
}
src/script/api/script_newgrf.hpp
Show inline comments
 
@@ -50,7 +50,7 @@ public:
 
	 * @pre ScriptNewGRF::IsLoaded(grfid).
 
	 * @return The name of the NewGRF or null if no name is defined.
 
	 */
 
	static char *GetName(SQInteger grfid);
 
	static std::optional<std::string> GetName(SQInteger grfid);
 
};
 

	
 
#endif /* SCRIPT_NEWGRF_HPP */
src/script/api/script_object.cpp
Show inline comments
 
@@ -218,12 +218,9 @@ ScriptObject::ActiveInstance::~ActiveIns
 
	return GetStorage()->log_data;
 
}
 

	
 
/* static */ char *ScriptObject::GetString(StringID string)
 
/* static */ std::string ScriptObject::GetString(StringID string)
 
{
 
	char buffer[64];
 
	::GetString(buffer, string, lastof(buffer));
 
	::StrMakeValidInPlace(buffer, lastof(buffer), SVS_NONE);
 
	return ::stredup(buffer);
 
	return ::StrMakeValid(::GetString(string));
 
}
 

	
 
/* static */ void ScriptObject::SetCallbackVariable(int index, int value)
src/script/api/script_object.hpp
Show inline comments
 
@@ -282,7 +282,7 @@ protected:
 
	/**
 
	 * Get an allocated string with all control codes stripped off.
 
	 */
 
	static char *GetString(StringID string);
 
	static std::string GetString(StringID string);
 

	
 
private:
 
	/* Helper functions for DoCommand. */
src/script/api/script_objecttype.cpp
Show inline comments
 
@@ -23,9 +23,9 @@
 
	return ObjectSpec::Get(object_type)->IsEverAvailable();
 
}
 

	
 
/* static */ char *ScriptObjectType::GetName(ObjectType object_type)
 
/* static */ std::optional<std::string> ScriptObjectType::GetName(ObjectType object_type)
 
{
 
	EnforcePrecondition(nullptr, IsValidObjectType(object_type));
 
	EnforcePrecondition(std::nullopt, IsValidObjectType(object_type));
 

	
 
	return GetString(ObjectSpec::Get(object_type)->name);
 
}
src/script/api/script_objecttype.hpp
Show inline comments
 
@@ -33,7 +33,7 @@ public:
 
	 * @pre IsValidObjectType(object_type).
 
	 * @return The name of an object.
 
	 */
 
	static char *GetName(ObjectType object_type);
 
	static std::optional<std::string> GetName(ObjectType object_type);
 

	
 
	/**
 
	 * Get the number of views for an object-type.
src/script/api/script_rail.cpp
Show inline comments
 
@@ -24,9 +24,9 @@
 

	
 
#include "../../safeguards.h"
 

	
 
/* static */ char *ScriptRail::GetName(RailType rail_type)
 
/* static */ std::optional<std::string> ScriptRail::GetName(RailType rail_type)
 
{
 
	if (!IsRailTypeAvailable(rail_type)) return nullptr;
 
	if (!IsRailTypeAvailable(rail_type)) return std::nullopt;
 

	
 
	return GetString(GetRailTypeInfo((::RailType)rail_type)->strings.menu_text);
 
}
src/script/api/script_rail.hpp
Show inline comments
 
@@ -101,7 +101,7 @@ public:
 
	 *  means that the name could be something like "Maglev construction" instead
 
	 *  of just "Maglev".
 
	 */
 
	static char *GetName(RailType rail_type);
 
	static std::optional<std::string> GetName(RailType rail_type);
 

	
 
	/**
 
	 * Checks whether the given tile is actually a tile with rail that can be
src/script/api/script_road.cpp
Show inline comments
 
@@ -25,9 +25,9 @@
 
	return ScriptCargo::HasCargoClass(cargo_type, ScriptCargo::CC_PASSENGERS) ? ROADVEHTYPE_BUS : ROADVEHTYPE_TRUCK;
 
}
 

	
 
/* static */ char *ScriptRoad::GetName(RoadType road_type)
 
/* static */ std::optional<std::string> ScriptRoad::GetName(RoadType road_type)
 
{
 
	if (!IsRoadTypeAvailable(road_type)) return nullptr;
 
	if (!IsRoadTypeAvailable(road_type)) return std::nullopt;
 

	
 
	return GetString(GetRoadTypeInfo((::RoadType)road_type)->strings.name);
 
}
src/script/api/script_road.hpp
Show inline comments
 
@@ -90,7 +90,7 @@ public:
 
	 * @pre IsRoadTypeAvailable(road_type).
 
	 * @return The name the road type has.
 
	 */
 
	static char *GetName(RoadType road_type);
 
	static std::optional<std::string> GetName(RoadType road_type);
 

	
 
	/**
 
	 * Determines whether a busstop or a truckstop is needed to transport a certain cargo.
src/script/api/script_sign.cpp
Show inline comments
 
@@ -47,9 +47,9 @@
 
	return ScriptObject::Command<CMD_RENAME_SIGN>::Do(sign_id, text);
 
}
 

	
 
/* static */ char *ScriptSign::GetName(SignID sign_id)
 
/* static */ std::optional<std::string> ScriptSign::GetName(SignID sign_id)
 
{
 
	if (!IsValidSign(sign_id)) return nullptr;
 
	if (!IsValidSign(sign_id)) return std::nullopt;
 

	
 
	::SetDParam(0, sign_id);
 
	return GetString(STR_SIGN_NAME);
src/script/api/script_sign.hpp
Show inline comments
 
@@ -55,7 +55,7 @@ public:
 
	 * @pre IsValidSign(sign_id).
 
	 * @return The name of the sign.
 
	 */
 
	static char *GetName(SignID sign_id);
 
	static std::optional<std::string> GetName(SignID sign_id);
 

	
 
	/**
 
	 * Get the owner of a sign.
src/script/api/script_town.cpp
Show inline comments
 
@@ -32,9 +32,9 @@
 
	return ::Town::IsValidID(town_id);
 
}
 

	
 
/* static */ char *ScriptTown::GetName(TownID town_id)
 
/* static */ std::optional<std::string> ScriptTown::GetName(TownID town_id)
 
{
 
	if (!IsValidTown(town_id)) return nullptr;
 
	if (!IsValidTown(town_id)) return std::nullopt;
 

	
 
	::SetDParam(0, town_id);
 
	return GetString(STR_TOWN_NAME);
src/script/api/script_town.hpp
Show inline comments
 
@@ -142,7 +142,7 @@ public:
 
	 * @pre IsValidTown(town_id).
 
	 * @return The name of the town.
 
	 */
 
	static char *GetName(TownID town_id);
 
	static std::optional<std::string> GetName(TownID town_id);
 

	
 
	/**
 
	 * Rename a town.
src/script/api/script_vehicle.cpp
Show inline comments
 
@@ -299,9 +299,9 @@
 
	return ::Vehicle::Get(vehicle_id)->unitnumber;
 
}
 

	
 
/* static */ char *ScriptVehicle::GetName(VehicleID vehicle_id)
 
/* static */ std::optional<std::string> ScriptVehicle::GetName(VehicleID vehicle_id)
 
{
 
	if (!IsPrimaryVehicle(vehicle_id)) return nullptr;
 
	if (!IsPrimaryVehicle(vehicle_id)) return std::nullopt;
 

	
 
	::SetDParam(0, vehicle_id);
 
	return GetString(STR_VEHICLE_NAME);
src/script/api/script_vehicle.hpp
Show inline comments
 
@@ -137,7 +137,7 @@ public:
 
	 * @pre IsPrimaryVehicle(vehicle_id).
 
	 * @return The name the vehicle has.
 
	 */
 
	static char *GetName(VehicleID vehicle_id);
 
	static std::optional<std::string> GetName(VehicleID vehicle_id);
 

	
 
	/**
 
	 * Get the owner of a vehicle.
src/script/squirrel_helper.hpp
Show inline comments
 
@@ -52,11 +52,22 @@ namespace SQConvert {
 
	template <> struct Return<Money>        { static inline int Set(HSQUIRRELVM vm, Money res)       { sq_pushinteger(vm, res); return 1; } };
 
	template <> struct Return<TileIndex>    { static inline int Set(HSQUIRRELVM vm, TileIndex res)   { sq_pushinteger(vm, (int32)res.value); return 1; } };
 
	template <> struct Return<bool>         { static inline int Set(HSQUIRRELVM vm, bool res)        { sq_pushbool   (vm, res); return 1; } };
 
	template <> struct Return<char *>       { static inline int Set(HSQUIRRELVM vm, char *res)       { if (res == nullptr) sq_pushnull(vm); else { sq_pushstring(vm, res, -1); free(res); } return 1; } };
 
	template <> struct Return<const char *> { static inline int Set(HSQUIRRELVM vm, const char *res) { if (res == nullptr) sq_pushnull(vm); else { sq_pushstring(vm, res, -1); } return 1; } };
 
	template <> struct Return<char *>       { /* Do not use char *, use std::optional<std::string> instead. */ };
 
	template <> struct Return<const char *> { /* Do not use const char *, use std::optional<std::string> instead. */ };
 
	template <> struct Return<void *>       { static inline int Set(HSQUIRRELVM vm, void *res)       { sq_pushuserpointer(vm, res); return 1; } };
 
	template <> struct Return<HSQOBJECT>    { static inline int Set(HSQUIRRELVM vm, HSQOBJECT res)   { sq_pushobject(vm, res); return 1; } };
 

	
 
	template <> struct Return<std::optional<std::string>> {
 
		static inline int Set(HSQUIRRELVM vm, std::optional<std::string> res) {
 
			if (res.has_value()) {
 
				sq_pushstring(vm, res.value(), -1);
 
			} else {
 
				sq_pushnull(vm);
 
			}
 
			return 1;
 
		}
 
	};
 

	
 
	/**
 
	 * To get a param from squirrel, we use this helper class. It converts to the right format.
 
	 * We use a class instead of a plain function to allow us to use partial template specializations.
0 comments (0 inline, 0 general)