Browse Source

config_file类添加int、double变量的获取接口

zzj 6 years ago
parent
commit
a30714264c
4 changed files with 62 additions and 15 deletions
  1. 3 3
      Makefile.am
  2. 44 7
      config_file.cpp
  3. 12 5
      config_file.h
  4. 3 0
      config_test.cpp

+ 3 - 3
Makefile.am

@@ -5,7 +5,7 @@ AM_LDFLAGS= -Wall -pthread -m64 -std=c++11 -fPIC
 
 lib_LTLIBRARIES=libzlog.la
 bin_PROGRAMS=logger 
-noinst_PROGRAMS=test config_test shmtest fmttest
+noinst_PROGRAMS=test shmtest fmttest cct
 
 AM_CPPFLAGS+=
 AM_LDFLAGS+=
@@ -28,8 +28,8 @@ shmtest_LDFLAGS=${AM_LDFLAGS} -lrt
 fmttest_SOURCES=fmttest.cpp tools.cpp 
 fmttest_LDFLAGS=${AM_LDFLAGS} -lrt 
 
-config_test_SOURCES=config_test.cpp config_file.cpp
-config_test_LDFLAGS=${AM_LDFLAGS} -lrt -L. -lboost_regex -lzlog
+cct_SOURCES=config_test.cpp config_file.cpp
+cct_LDFLAGS=${AM_LDFLAGS} -lrt -L. -lboost_regex -lzlog
 
 
 DEFS= 

+ 44 - 7
config_file.cpp

@@ -85,17 +85,54 @@ int config_file::open(const char*fname)
 	return 0;
 }
 
-const char* config_file::get(const char*sec,const char*key,const char*v)
+int config_file::get(const char*key,int default_v)const
 {
-	char k[256];
+	auto it=_map.find(key);
+
+	return it==_map.end()
+			?  (log_info("config param: %s=%d(default)",key,default_v),default_v) 
+			:  (log_info("config param: %s=%d",key,it->second), atoi(it->second));
+}
+
+int config_file::get(const char*sec,const char*key,int default_v)const
+{
+	char k[512];
+	sprintf(k,"%s.%s",sec,key);
+
+	return get(k,default_v);
+}
+
+double config_file::get(const char*key,double default_v)const
+{
+	auto it=_map.find(key);
+
+	return it==_map.end()
+			?  (log_info("config param: %s=%lf(default)",key,default_v),default_v) 
+			:  (log_info("config param: %s=%lf",key,it->second), atof(it->second));
+}
+
+double config_file::get(const char*sec,const char*key,double default_v)const
+{
+	char k[512];
+	sprintf(k,"%s.%s",sec,key);
+
+	return get(k,default_v);
+}
+
+const char* config_file::get(const char*sec,const char*key,const char*v)const
+{
+	char k[512];
 	sprintf(k,"%s.%s",sec,key);
+	return get(k,v);
+#if 0
 	auto it=_map.find(k);
 	return it==_map.end()
 			?  get(k,v)
 			:  (log_info("config param: %s=%s",k,it->second),it->second);
+#endif
 }
 
-const char* config_file::get(const char*key,const char*defv)
+const char* config_file::get(const char*key,const char*defv)const
 {
 	auto it=_map.find(key);
 
@@ -104,7 +141,7 @@ const char* config_file::get(const char*key,const char*defv)
 			:  (log_info("config param: %s=%s",key,it->second), it->second);
 }
 
-std::set<const char*> config_file::keys()
+std::set<const char*> config_file::keys()const
 {
 	std::set<const char*> ret;
 	for(auto it:_map)
@@ -113,14 +150,14 @@ std::set<const char*> config_file::keys()
 	return std::move(ret);
 }
 
-bool config_file::contains(const char*k)
+bool config_file::contains(const char*k)const
 {
 	return _map.find(k)!=_map.end();
 }
 
-bool config_file::contains(const char*sec,const char*k)
+bool config_file::contains(const char*sec,const char*k)const
 {
-	char key[256];
+	char key[512];
 	snprintf(key,255,"%s.%s",sec,k);
 	return contains(key);
 }

+ 12 - 5
config_file.h

@@ -26,13 +26,20 @@ public:
 
 	int open(const char*fname);
 
-	const char* get(const char*key,const char*v);
-	const char* get(const char*sec,const char*key,const char*v);
 
-	std::set<const char*> keys();
+	int get(const char*key,int default_v)const;
+	int get(const char*sec,const char*key,int default_v)const;
 
-	bool contains(const char*k);
-	bool contains(const char*sec,const char*k);
+	double get(const char*key,double default_v)const;
+	double get(const char*sec,const char*key,double default_v)const;
+
+	const char* get(const char*key,const char*default_v)const;
+	const char* get(const char*sec,const char*key,const char*default_v)const;
+
+	std::set<const char*> keys()const;
+
+	bool contains(const char*k)const ;
+	bool contains(const char*sec,const char*k)const;
 
 	void print(std::ostream&o);
 };

+ 3 - 0
config_test.cpp

@@ -19,6 +19,9 @@ void test(const char*fname)
 
 	log_info("contains(%s)=%d","main.file",config.contains("main.file"));
 	log_info("contains(%s)=%d","a",config.contains("a"));
+
+	config.get("undefined2",0);
+	config.get("undefined1",nullptr);
 	
 	std::cout<<"-------------------------------------------------------\n";
 	config.print(std::cout);