cocos2d-x开发: 一切应该从配置文件读取开始(7)
来源:未知 责任编辑:责任编辑 发表时间:2015-03-01 01:33 点击:次
p>199 }
p>200 }
p>201 std::string INICache::parseSection(const std::string& buffer, const std::string& leftTag, const std::string& rightTag)
p>202 {
p>203 std::string ret;
p>204 if(!buffer.empty())
p>205 {
p>206 std::string::size_type pos_begin = 0, pos_end = 0;
p>207 if(!leftTag.empty())
p>208 {
p>209 pos_begin = buffer.find(leftTag);
p>210 if(pos_begin == std::string::npos) { return ret; }
p>211 pos_begin += leftTag.size();
p>212 } else { pos_begin = 0; }
p>213 if(!rightTag.empty())
p>214 {
p>215 pos_end = buffer.find(rightTag, pos_begin);
p>216 if(pos_end == std::string::npos) { return ret; }
p>217 ret = buffer.substr(pos_begin, pos_end - pos_begin);
p>218 } else { ret = buffer.substr(pos_begin, std::string::npos); }
p>219 }
p>220 return ret;
p>221 }
p>222 bool INICache::stringToBoolean(const std::string& buffer, bool defaultValue)
p>223 {
p>224 if(buffer.empty()) { return defaultValue; }
p>225 std::stringstream sstream;
p>226 sstream << buffer;
p>227 int tmp = 0;
p>228 sstream >> tmp;
p>229 return (buffer.compare(std::string("true"))==0 || tmp > 0);
p>230 }
p>231 }
p>
p>
p>
p> 这里主要是说一下我做的这些接口的思路. 读取涉及到的get/set这些方法,是基本需求.提供了两个读取Ini buffer的方法,一个是loadFromFile(const std::string& filePath),这个接口主要是应对客户端从本地读取配置文件信息,而loadFromStream(const std::stringstream& sstream)接口则是作为预留,从buffer直接读取Ini配置,为什么会做这样一个接口的预留呢? 可以一起看一下getSectionNames这个接口方法,返回的是key值的集合.
p>
p>我是这样考虑的,c++这部分的接口尽量的简单,实现基本的功能,尽量避开业务逻辑的操作.要什么,我就提供基本接口,除非是在lua那边实现效率不高,或者是复杂,才会考虑提供完整的功能.因为紧接着下面会做更新模块的功能,这部分至少会依赖读取配置中一条关于资源版本的信息.而从远程Http服务器下载资源的时候也还是需要做很多版本的检测处理,如果是增量更新的话,需要按照版本的先后顺序依次下载.这就是要对key值进行按照需求排序. 本来在c++这部分做很简单的,我只要用std::sort函数,提供一个compare函数就好了。可是这部分是和具体的更新业务逻辑关联的,所以我不应该在c++这部分实现,所以就只是提供给你获取集合的方法.然后自己去处理.
相关新闻>>
最新推荐更多>>>
- 发表评论
-
- 最新评论 更多>>