1. dirtycold
  2. IniConfig

Commits

dirtycold  committed 70d74e7

modified: compile with vs2008

  • Participants
  • Parent commits b7fcfd4
  • Branches master

Comments (0)

Files changed (5)

File IniConfig/global.h

View file
  • Ignore whitespace
-#ifndef TOOLS_H
+#ifndef TOOLS_H
 #define TOOLS_H
 
 #include <vector>
 #ifdef _MSC_VER
 // MSDN reference
 static const unsigned long nan[2]={0xffffffff, 0x7fffffff};
-static const double NAN = *(double *)nan;
+static const double NaN = *(double *)nan;
+#else
+static const double NaN = NAN;
+#endif
+
+#ifdef _MSC_VER
+static inline int round(double x)
+{
+    double xx = int(x);
+    double r = x - xx;
+    if (std::abs(r) < 0.5)
+    {
+        return int(xx);
+    }
+    else
+    {
+        return x>0?int(xx+1):int(xx-1);
+    }
+}
+
+#else
+#define round round
 #endif
 
 // variables

File IniConfig/iniconfig.cpp

View file
  • Ignore whitespace
-#include "iniconfig.h"
+#include "iniconfig.h"
 #include <fstream>
 
+using namespace rp;
 
 IniConfig::IniConfig(const std::string &filepath)
     :m_filepath(filepath)
 std::string IniConfig::value(const std::string &key)
 {
     if (m_map.find(key) != m_map.end())
-        return m_map.at(key);
+        return m_map[key];
     else
         return "";
 }
 {
     std::string s = value(key);
     if (s.empty())
-        return NAN;
+        return rp::NaN;
     else
         return rp::toDouble(s);
 }
 int IniConfig::intValue(const std::string &key)
 {
     double r = doubleValue(key);
-    if (r != NAN)
-        return int(round(r));
+    if (r != rp::NaN)
+        return rp::round(r);
     else
-        return int(NAN);
+        return int(rp::NaN);
 }
 
 rp::dataseries IniConfig::dataSeries(const std::string &key)

File IniConfig/iniconfig.h

View file
  • Ignore whitespace
-#ifndef INICONFIG_H
+#ifndef INICONFIG_H
 #define INICONFIG_H
 
 #include "export.h"
 
 }
 
-class INI IniConfig
+class rp::IniConfig
 {
 
 public:
      * @brief 构造函数
      * @param filepath 指定配置文件的路径和文件名
      */
-    IniConfig (const std::string &filepath);
+    INI IniConfig (const std::string &filepath);
 
-    ~IniConfig ();
+    INI ~IniConfig ();
     /**
      * @brief 转换字符缓冲为配置关系表
      * @param stream 指定的字符缓冲
      * @note 默认为附加式读取,即现有配置不变
      * @warning 若键值与现有条目重复,会被忽略
      */
-    void map (std::stringstream &stream);
+    INI void map (std::stringstream &stream);
     /**
      * @brief 重新转换配置关系表
      * @param stream 指定的字符缓冲
      * @warning 会清除现有条目
      */
-    void remap (std::stringstream &stream);
+    INI void remap (std::stringstream &stream);
     /**
      * @brief 清除现有配置关系表
      */
-    void clear ();
+    INI void clear ();
 
     /**
      * @brief 取得特定键值的配置内容
      * @param key 指定的键值
      * @return 键值的内容
      */
-    std::string value (const std::string &key);
+    INI std::string value (const std::string &key);
     /**
      * @brief 取得特定键值的配置内容,并转换为双精度浮点数
      * @param key 指定的键值
      * @return 键值的内容
      */
-    double doubleValue (const std::string &key);
+    INI double doubleValue (const std::string &key);
     /**
      * @brief 取得特定键值的配置内容,并转换为整型
      * @param key 指定的键值
      * @return 键值的内容
      */
-    int intValue (const std::string &key);
+    INI int intValue (const std::string &key);
     /**
      * @brief 取得特定键值的配置内容,以花括号识别等号分割,并转换为数据序列
      * @param key 指定的键值
      * @return 键值的数据序列
      */
-    rp::dataseries dataSeries(const std::string &key);
+    INI rp::dataseries dataSeries(const std::string &key);
 
     /**
      * @brief 设定配置键值的内容
      * @param key 指定的键值
      * @param value 键值的内容
      */
-    void set (const std::string &key, const std::string &value);
+    INI void set (const std::string &key, const std::string &value);
     /**
      * @brief 设定配置键值的内容
      * @param key 指定的键值
      * @param value 键值的内容,双精度浮点
      */
-    void set (const std::string &key, const double &value);
+    INI void set (const std::string &key, const double &value);
     /**
      * @brief 设定配置键值的内容
      * @param key 指定的键值
      * @param value 键值的内容,整型
      */
-    void set (const std::string &key, const int &value);
+    INI void set (const std::string &key, const int &value);
     /**
      * @brief 设定配置键值的数据序列
      * @param key 指定的键值
      * @param v 数据序列
      */
-    void setDataSeries(const std::string &key, const rp::dataseries &v);
+    INI void setDataSeries(const std::string &key, const rp::dataseries &v);
     /**
      * @brief 导出配置关系表到字符缓冲
      * @param stream 指定的字符缓冲
      * @param verbose 是否输出为调试格式
      * @note 调试格式仅用来调试,无法用于配置的保存
      */
-    void dump(std::stringstream &stream, bool verbose = false);
+    INI void dump(std::stringstream &stream, bool verbose = false);
     /**
      * @brief 导出现有配置关系表
      * @return 现有配置关系表的 const reference
      */
-    const rp::stringmap &mapRef();
+    INI const rp::stringmap &mapRef();
 
 protected:
     /**

File tests/main.cpp

View file
  • Ignore whitespace
-#include "../IniConfig/iniconfig.h"
+#include "../IniConfig/iniconfig.h"
 
 int main(int argc, char* argv[])
 {
     UNUSED(argc);
     UNUSED(argv);
 
-    IniConfig ini ("config.cfg");
+    rp::IniConfig ini ("config.cfg");
     std::vector<double> data = ini.dataSeries("data");
     for (unsigned int i = 0; i < data.size(); ++i)
     {

File tests/tests.pro

View file
  • Ignore whitespace
 CONFIG -= qt
 SOURCES += main.cpp
 
+CONFIG += console
+
 win32:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../IniConfig/release/ -lIniConfig
 else:win32:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../IniConfig/debug/ -lIniConfig
 else:unix: LIBS += -L$$OUT_PWD/../IniConfig/ -lIniConfig