use InitOnOff

This commit is contained in:
wyy 2014-01-29 20:37:26 +08:00
parent 259b296b71
commit d5bb4e48ec
4 changed files with 42 additions and 20 deletions

View File

@ -1 +1,3 @@
INSTALL(FILES ArgvContext.hpp io_functs.hpp macro_def.hpp MysqlClient.hpp str_functs.hpp cast_functs.hpp Config.hpp logger.hpp map_functs.hpp std_outbound.hpp DESTINATION include/CppJieba/Limonp)
INSTALL(FILES ArgvContext.hpp io_functs.hpp macro_def.hpp MysqlClient.hpp
str_functs.hpp cast_functs.hpp Config.hpp logger.hpp map_functs.hpp
std_outbound.hpp InitOnOff.hpp DESTINATION include/CppJieba/Limonp)

21
src/Limonp/InitOnOff.hpp Normal file
View File

@ -0,0 +1,21 @@
#ifndef LIMONP_INITONOFF_H
#define LIMONP_INITONOFF_H
namespace Limonp
{
class InitOnOff
{
public:
InitOnOff(){_setInitFlag(false);};
~InitOnOff(){};
protected:
bool _isInited;
bool _getInitFlag()const{return _isInited;};
bool _setInitFlag(bool flag){return _isInited = flag;};
public:
operator bool(){return _getInitFlag();};
};
}
#endif

View File

@ -100,7 +100,7 @@ namespace Limonp
inline bool split(const string& src, vector<string>& res, const string& pattern)
inline bool split(const string& src, vector<string>& res, const string& pattern, size_t offset = 0, size_t len = string::npos)
{
if(src.empty())
{
@ -110,20 +110,28 @@ namespace Limonp
size_t start = 0;
size_t end = 0;
while(start < src.size())
size_t cnt = 0;
while(start < src.size() && res.size() < len)
{
end = src.find_first_of(pattern, start);
if(string::npos == end)
{
res.push_back(src.substr(start));
if(cnt >= offset)
{
res.push_back(src.substr(start));
}
return true;
}
res.push_back(src.substr(start, end - start));
if(end == src.size() - 1)
//if(end == src.size() - 1)
//{
// res.push_back("");
// return true;
//}
if(cnt >= offset)
{
res.push_back("");
break;
res.push_back(src.substr(start, end - start));
}
cnt ++;
start = end + 1;
}
return true;
@ -158,12 +166,8 @@ namespace Limonp
return ltrim(rtrim(s));
}
inline bool startsWith(const string& str, const string& prefix)
{
//return str.substr(0, prefix.size()) == prefix;
if(prefix.length() > str.length())
{
return false;

View File

@ -3,6 +3,7 @@
#include "TransCode.hpp"
#include "Limonp/logger.hpp"
#include "Limonp/InitOnOff.hpp"
#include "ISegment.hpp"
#include <cassert>
@ -10,17 +11,11 @@
namespace CppJieba
{
using namespace Limonp;
class SegmentBase: public ISegment
class SegmentBase: public ISegment, public InitOnOff
{
public:
SegmentBase(){_setInitFlag(false);};
SegmentBase(){};
virtual ~SegmentBase(){};
protected:
bool _isInited;
bool _getInitFlag()const{return _isInited;};
bool _setInitFlag(bool flag){return _isInited = flag;};
public:
operator bool(){return _getInitFlag();};
public:
virtual bool cut(Unicode::const_iterator begin, Unicode::const_iterator end, vector<string>& res)const = 0;