![]() |
Shadowrun: Awakened 29 September 2011 - Build 871
|
00001 /* 00002 Copyright (c) 2009-2010 Christopher A. Taylor. All rights reserved. 00003 00004 Redistribution and use in source and binary forms, with or without 00005 modification, are permitted provided that the following conditions are met: 00006 00007 * Redistributions of source code must retain the above copyright notice, 00008 this list of conditions and the following disclaimer. 00009 * Redistributions in binary form must reproduce the above copyright notice, 00010 this list of conditions and the following disclaimer in the documentation 00011 and/or other materials provided with the distribution. 00012 * Neither the name of LibCat nor the names of its contributors may be used 00013 to endorse or promote products derived from this software without 00014 specific prior written permission. 00015 00016 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 00017 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 00018 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 00019 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 00020 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 00021 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 00022 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 00023 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 00024 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 00025 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 00026 POSSIBILITY OF SUCH DAMAGE. 00027 */ 00028 00029 #ifndef CAT_SETTINGS_HPP 00030 #define CAT_SETTINGS_HPP 00031 00032 #include <cat/Singleton.hpp> 00033 #include <cat/threads/Mutex.hpp> 00034 #include <fstream> 00035 00036 namespace cat { 00037 00038 00039 enum SettingsValueFlags 00040 { 00041 CAT_SETTINGS_FILLED = 1, // s[] array has been set 00042 CAT_SETTINGS_INT = 2, // value has been promoted to int 'i' 00043 }; 00044 00045 struct SettingsValue 00046 { 00047 u8 flags; // sum of SettingsValueFlags 00048 char s[256]; // always nul-terminated 00049 int i; 00050 }; 00051 00052 00053 class SettingsKey 00054 { 00055 public: 00056 SettingsKey(SettingsKey *lnode, SettingsKey *gnode, const char *name); 00057 ~SettingsKey(); 00058 00059 public: 00060 SettingsKey *lnode, *gnode; 00061 00062 char name[64]; // not necessarily nul-terminated 00063 00064 SettingsValue value; 00065 00066 public: 00067 void write(std::ofstream &file); 00068 }; 00069 00070 00071 // User settings manager 00072 class Settings : public Singleton<Settings> 00073 { 00074 CAT_SINGLETON(Settings); 00075 00076 Mutex _lock; 00077 00078 protected: 00079 static const u32 KEY_HASH_SALT = 0xbaddecaf; 00080 static const int SETTINGS_HASH_BINS = 256; 00081 00082 SettingsKey *hbtrees[SETTINGS_HASH_BINS]; // hash table of binary trees 00083 00084 bool readSettings; // Flag set when settings have been read from disk 00085 bool modified; // Flag set when settings have been modified since last write 00086 00087 std::string _settings_file; 00088 00089 protected: 00090 SettingsKey *addKey(const char *name); 00091 SettingsKey *getKey(const char *name); 00092 00093 SettingsKey *initInt(const char *name, int n, bool overwrite); 00094 SettingsKey *initStr(const char *name, const char *value, bool overwrite); 00095 00096 void clear(); 00097 00098 public: 00099 void readSettingsFromFile(const char *file_path = "settings.txt", const char *override_file = "override.txt"); 00100 void readSettingsFromBuffer(const char *data, int len); 00101 void write(); 00102 00103 public: 00104 int getInt(const char *name); 00105 const char *getStr(const char *name); 00106 00107 int getInt(const char *name, int init); 00108 const char *getStr(const char *name, const char *init); 00109 00110 void setInt(const char *name, int n); 00111 void setStr(const char *name, const char *value); 00112 }; 00113 00114 00115 } // namespace cat 00116 00117 #endif // CAT_SETTINGS_HPP
Copyright © 2007-2010 by The Shadowrun: Awakened Team. This work is licensed under the GNU Lesser General Public License 3.