CARLA
 
载入中...
搜索中...
未找到
IniFile.h
浏览该文件的文档.
1// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma
2// de Barcelona (UAB).
3//
4// This work is licensed under the terms of the MIT license.
5// For a copy, see <https://opensource.org/licenses/MIT>.
6
7#pragma once
8
9#include "ConfigCacheIni.h"
10
11#include <limits>
12
13/// Wrapper around Unreal's INI file. In get functions, @a Target value is only
14/// set if it was present in the INI file, otherwise it keeps its value.
15class CARLA_API FIniFile : private NonCopyable
16{
17private:
18
19 template <typename TARGET, typename SOURCE>
20 static void SafeCastTo(SOURCE source, TARGET &target)
21 {
22 if ((source >= std::numeric_limits<TARGET>::lowest()) &&
23 (source <= std::numeric_limits<TARGET>::max())) {
24 target = static_cast<TARGET>(source);
25 } else {
26 UE_LOG(LogCarla, Error, TEXT("FIniFile: Type cast failed"));
27 }
28 }
29
30public:
31
32 // ===========================================================================
33 /// @name Constructor
34 // ===========================================================================
35 /// @{
36
37 FIniFile() = default;
38
39 explicit FIniFile(const FString &FileName)
40 {
41 ConfigFile.Read(FileName);
42 }
43
44 /// @}
45 // ===========================================================================
46 /// @name Other functions
47 // ===========================================================================
48 /// @{
49
50 bool Combine(const FString &FileName)
51 {
52 return ConfigFile.Combine(FileName);
53 }
54
55 void ProcessInputFileContents(const FString &INIFileContents)
56 {
57 ConfigFile.ProcessInputFileContents(INIFileContents);
58 }
59
60 bool HasSection(const FString &Section) const
61 {
62 return (ConfigFile.Num() > 0) && (ConfigFile.Find(Section) != nullptr);
63 }
64
65 void AddSectionIfMissing(const FString &Section)
66 {
67 if (!HasSection(Section)) {
68 ConfigFile.Add(Section, FConfigSection());
69 }
70 }
71
72 /// Write contents to disk.
73 bool Write(const FString &Filename)
74 {
75 return ConfigFile.Write(Filename);
76 }
77
78 /// Retrieve Unreal's FConfigFile.
79 const FConfigFile &GetFConfigFile() const
80 {
81 return ConfigFile;
82 }
83
84 /// @}
85 // ===========================================================================
86 /// @name Get functions
87 // ===========================================================================
88 /// @{
89
90 template <typename T>
91 void GetInt(const TCHAR* Section, const TCHAR* Key, T &Target) const
92 {
93 int64 Value;
94 if (ConfigFile.GetInt64(Section, Key, Value)) {
95 SafeCastTo<T>(Value, Target);
96 }
97 }
98
99 void GetString(const TCHAR* Section, const TCHAR* Key, FString &Target) const
100 {
101 FString Value;
102 if (ConfigFile.GetString(Section, Key, Value)) {
103 Target = Value;
104 }
105 }
106
107 void GetBool(const TCHAR* Section, const TCHAR* Key, bool &Target) const
108 {
109 bool Value;
110 if (ConfigFile.GetBool(Section, Key, Value)) {
111 Target = Value;
112 }
113 }
114
115 void GetFloat(const TCHAR* Section, const TCHAR* Key, float &Target, const float Factor = 1.0f) const
116 {
117 FString Value;
118 if (ConfigFile.GetString(Section, Key, Value)) {
119 Target = Factor * FCString::Atof(*Value);
120 }
121 }
122
123 void GetLinearColor(const TCHAR* Section, const TCHAR* Key, FLinearColor &Target) const
124 {
125 FString Value;
126 if (ConfigFile.GetString(Section, Key, Value)) {
127 Target.InitFromString(Value);
128 }
129 }
130
131 /// @}
132 // ===========================================================================
133 /// @name Set functions
134 // ===========================================================================
135 /// @{
136
137 void SetInt(const TCHAR* Section, const TCHAR* Key, const int64 Value)
138 {
139 ConfigFile.SetInt64(Section, Key, Value);
140 }
141
142 void SetString(const TCHAR* Section, const TCHAR* Key, const TCHAR* Value)
143 {
144 ConfigFile.SetString(Section, Key, Value);
145 }
146
147 void SetString(const TCHAR* Section, const TCHAR* Key, const FString &Value)
148 {
149 SetString(Section, Key, *Value);
150 }
151
152 void SetBool(const TCHAR* Section, const TCHAR* Key, const bool Value)
153 {
154 SetString(Section, Key, Value ? TEXT("True") : TEXT("False"));
155 }
156
157 void SetFloat(const TCHAR* Section, const TCHAR* Key, const float Value)
158 {
159 SetString(Section, Key, FText::AsNumber(Value).ToString());
160 }
161
162 void SetLinearColor(const TCHAR* Section, const TCHAR* Key, const FLinearColor &Value)
163 {
164 SetString(Section, Key, Value.ToString());
165 }
166
167 /// @}
168
169private:
170
171 FConfigFile ConfigFile;
172};
Wrapper around Unreal's INI file.
Definition IniFile.h:16
void SetLinearColor(const TCHAR *Section, const TCHAR *Key, const FLinearColor &Value)
Definition IniFile.h:162
FConfigFile ConfigFile
Definition IniFile.h:171
const FConfigFile & GetFConfigFile() const
Retrieve Unreal's FConfigFile.
Definition IniFile.h:79
void ProcessInputFileContents(const FString &INIFileContents)
Definition IniFile.h:55
bool Combine(const FString &FileName)
Definition IniFile.h:50
bool Write(const FString &Filename)
Write contents to disk.
Definition IniFile.h:73
static void SafeCastTo(SOURCE source, TARGET &target)
Definition IniFile.h:20
bool HasSection(const FString &Section) const
Definition IniFile.h:60
void SetFloat(const TCHAR *Section, const TCHAR *Key, const float Value)
Definition IniFile.h:157
FIniFile()=default
void GetBool(const TCHAR *Section, const TCHAR *Key, bool &Target) const
Definition IniFile.h:107
FIniFile(const FString &FileName)
Definition IniFile.h:39
void GetFloat(const TCHAR *Section, const TCHAR *Key, float &Target, const float Factor=1.0f) const
Definition IniFile.h:115
void GetString(const TCHAR *Section, const TCHAR *Key, FString &Target) const
Definition IniFile.h:99
void SetString(const TCHAR *Section, const TCHAR *Key, const TCHAR *Value)
Definition IniFile.h:142
void SetString(const TCHAR *Section, const TCHAR *Key, const FString &Value)
Definition IniFile.h:147
void AddSectionIfMissing(const FString &Section)
Definition IniFile.h:65
void GetInt(const TCHAR *Section, const TCHAR *Key, T &Target) const
Definition IniFile.h:91
void SetInt(const TCHAR *Section, const TCHAR *Key, const int64 Value)
Definition IniFile.h:137
void SetBool(const TCHAR *Section, const TCHAR *Key, const bool Value)
Definition IniFile.h:152
void GetLinearColor(const TCHAR *Section, const TCHAR *Key, FLinearColor &Target) const
Definition IniFile.h:123