1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
|
/* This file is part of the Spring engine (GPL v2 or later), see LICENSE.html */
// The structs in this file relate to *Info.lua files.
// They are used for AIs (-> AIInfo.lua) for example.
// This file is used (at least) by unitsync and the engine.
#ifndef _INFO_H
#define _INFO_H
#include "System/FileSystem/VFSModes.h"
#include <string>
#include <vector>
#include <set>
enum InfoValueType {
INFO_VALUE_TYPE_STRING,
INFO_VALUE_TYPE_INTEGER,
INFO_VALUE_TYPE_FLOAT,
INFO_VALUE_TYPE_BOOL,
};
struct InfoItem {
InfoItem()
: valueType(INFO_VALUE_TYPE_STRING)
{
}
InfoItem(const std::string& _key, const std::string& _desc, const std::string _value)
: key(_key)
, desc(_desc)
, valueType(INFO_VALUE_TYPE_STRING)
, valueTypeString(_value)
{}
InfoItem(const std::string& _key, const std::string& _desc, int _value)
: key(_key)
, desc(_desc)
, valueType(INFO_VALUE_TYPE_INTEGER)
{
value.typeInteger = _value;
}
InfoItem(const std::string& _key, const std::string& _desc, float _value)
: key(_key)
, desc(_desc)
, valueType(INFO_VALUE_TYPE_FLOAT)
{
value.typeFloat = _value;
}
InfoItem(const std::string& _key, const std::string& _desc, bool _value)
: key(_key)
, desc(_desc)
, valueType(INFO_VALUE_TYPE_BOOL)
{
value.typeBool = _value;
}
public:
std::string key;
std::string desc;
InfoValueType valueType;
union Value {
int typeInteger;
float typeFloat;
bool typeBool;
} value;
/** It is not possible to use a type with destructor in a union */
std::string valueTypeString;
public:
std::string GetValueAsString(const bool convBooltoInt = true) const;
};
void info_convertToStringValue(InfoItem* infoItem);
const char* info_convertTypeToString(InfoValueType infoValueType);
void info_parseInfo(
std::vector<InfoItem>& options,
const std::string& fileName,
const std::string& fileModes = SPRING_VFS_RAW,
const std::string& accessModes = SPRING_VFS_RAW,
std::set<std::string>* infoSet = NULL);
std::vector<InfoItem> info_parseInfo(
const std::string& fileName,
const std::string& fileModes = SPRING_VFS_RAW,
const std::string& accessModes = SPRING_VFS_RAW,
std::set<std::string>* infoSet = NULL);
#endif // _INFO_H
|