CARLA
IniFile.h
Go to the documentation of this file.
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.
15 class CARLA_API FIniFile : private NonCopyable
16 {
17 private:
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 
30 public:
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 
169 private:
170 
171  FConfigFile ConfigFile;
172 };
void AddSectionIfMissing(const FString &Section)
Definition: IniFile.h:65
void SetBool(const TCHAR *Section, const TCHAR *Key, const bool Value)
Definition: IniFile.h:152
void GetString(const TCHAR *Section, const TCHAR *Key, FString &Target) const
Definition: IniFile.h:99
void SetFloat(const TCHAR *Section, const TCHAR *Key, const float Value)
Definition: IniFile.h:157
bool Write(const FString &Filename)
Write contents to disk.
Definition: IniFile.h:73
void GetInt(const TCHAR *Section, const TCHAR *Key, T &Target) const
Definition: IniFile.h:91
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 GetFloat(const TCHAR *Section, const TCHAR *Key, float &Target, const float Factor=1.0f) const
Definition: IniFile.h:115
void ProcessInputFileContents(const FString &INIFileContents)
Definition: IniFile.h:55
static void SafeCastTo(SOURCE source, TARGET &target)
Definition: IniFile.h:20
bool HasSection(const FString &Section) const
Definition: IniFile.h:60
FConfigFile ConfigFile
Definition: IniFile.h:171
void GetBool(const TCHAR *Section, const TCHAR *Key, bool &Target) const
Definition: IniFile.h:107
FIniFile(const FString &FileName)
Definition: IniFile.h:39
void GetLinearColor(const TCHAR *Section, const TCHAR *Key, FLinearColor &Target) const
Definition: IniFile.h:123
void SetInt(const TCHAR *Section, const TCHAR *Key, const int64 Value)
Definition: IniFile.h:137
const FConfigFile & GetFConfigFile() const
Retrieve Unreal&#39;s FConfigFile.
Definition: IniFile.h:79
void SetLinearColor(const TCHAR *Section, const TCHAR *Key, const FLinearColor &Value)
Definition: IniFile.h:162
bool Combine(const FString &FileName)
Definition: IniFile.h:50
Wrapper around Unreal&#39;s INI file.
Definition: IniFile.h:15