Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
镜像
OpenAtomFoundation
pika
提交
81086283
pika
项目概览
镜像
/
OpenAtomFoundation
/
pika
11 个月 前同步成功
通知
0
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
pika
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
81086283
编写于
2月 04, 2016
作者:
W
wangkang-xy
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Modify command structure
上级
3ab80217
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
80 addition
and
60 deletion
+80
-60
include/pika_command.h
include/pika_command.h
+44
-38
include/pika_kv.h
include/pika_kv.h
+26
-0
src/pika_command.cc
src/pika_command.cc
+6
-11
src/pika_kv.cc
src/pika_kv.cc
+4
-11
未找到文件。
include/pika_command.h
浏览文件 @
81086283
...
@@ -37,68 +37,74 @@ enum CmdRes {
...
@@ -37,68 +37,74 @@ enum CmdRes {
static
const
std
::
string
CmdNameSet
=
"set"
;
static
const
std
::
string
CmdNameSet
=
"set"
;
class
CmdInfo
{
public:
CmdInfo
(
const
std
::
string
_name
,
int
_num
,
int16_t
_flag
)
:
name_
(
_name
),
arity_
(
_num
),
flag_
(
_flag
)
{}
bool
CheckArg
(
int
num
)
const
{
if
((
arity_
>
0
&&
num
!=
arity_
)
||
(
arity_
<
0
&&
num
<
-
arity_
))
{
return
false
;
}
return
true
;
}
int16_t
flag_rw
()
const
{
return
flag_
&
CmdFlagsMaskRW
;
}
int16_t
flag_type
()
const
{
return
flag_
&
CmdFlagsMaskType
;
}
int16_t
flag_local
()
const
{
return
flag_
&
CmdFlagsMaskLocal
;
}
int16_t
flag_prior
()
const
{
return
flag_
&
CmdFlagsMaskPrior
;
}
std
::
string
name
()
const
{
return
name_
;
}
private:
std
::
string
name_
;
int
arity_
;
int
flag_
;
};
class
Cmd
{
class
Cmd
{
public:
public:
Cmd
(
const
std
::
string
_name
,
int
_num
,
int16_t
_flag
)
:
name_
(
_name
),
arity_
(
_num
),
flag_
(
_flag
)
{};
virtual
~
Cmd
()
{}
Cmd
()
{};
virtual
~
Cmd
()
=
0
;
virtual
int16_t
Do
(
PikaCmdArgsType
&
argvs
,
std
::
string
&
ret
)
=
0
;
virtual
int16_t
Do
(
PikaCmdArgsType
&
argvs
,
std
::
string
&
ret
)
=
0
;
int16_t
flag
()
{
return
flag_
;
}
virtual
const
CmdInfo
&
cmd_info
()
=
0
;
std
::
string
name
()
{
return
name_
;
}
protected:
protected:
virtual
bool
Initial
(
PikaCmdArgsType
&
argvs
,
std
::
string
&
ret
)
=
0
;
virtual
bool
Initial
(
PikaCmdArgsType
&
argvs
,
std
::
string
&
ret
)
=
0
;
std
::
string
PopArg
(
PikaCmdArgsType
&
arg
,
bool
keyword
=
false
);
bool
CheckArg
(
const
PikaCmdArgsType
&
argv
);
private:
std
::
string
name_
;
int
arity_
;
int16_t
flag_
;
};
};
class
CmdGenerator
{
Cmd
*
getCmd
(
const
std
::
string
&
opt
);
public:
std
::
string
PopArg
(
PikaCmdArgsType
&
arg
,
bool
keyword
=
false
);
static
Cmd
*
getCmd
(
const
std
::
string
&
opt
);
};
class
CmdHolder
:
public
Cmd
{
class
CmdHolder
:
public
Cmd
{
public:
public:
explicit
CmdHolder
(
const
std
::
string
&
opt
)
:
valid_
(
true
){
explicit
CmdHolder
(
const
std
::
string
&
opt
)
:
valid_
(
true
){
cmd_
=
CmdGenerator
::
getCmd
(
opt
);
cmd_
=
getCmd
(
opt
);
if
(
cmd_
==
NULL
)
{
valid_
=
false
;
}
if
(
cmd_
==
NULL
)
{
valid_
=
false
;
}
}
}
~
CmdHolder
()
{
~
CmdHolder
()
{
if
(
valid_
)
delete
cmd_
;
if
(
valid_
)
delete
cmd_
;
}
}
int16_t
Do
(
PikaCmdArgsType
&
argvs
,
std
::
string
&
ret
)
{
int16_t
Do
(
PikaCmdArgsType
&
argvs
,
std
::
string
&
ret
)
{
return
cmd_
->
Do
(
argvs
,
ret
);
return
cmd_
->
Do
(
argvs
,
ret
);
}
const
CmdInfo
&
cmd_info
()
{
return
cmd_
->
cmd_info
();
}
bool
valid
()
{
return
valid_
;
}
}
int16_t
flag
()
{
return
cmd_
->
flag
();
}
std
::
string
name
()
{
return
cmd_
->
name
();
}
bool
valid
()
{
return
valid_
;
}
private:
private:
Cmd
*
cmd_
;
Cmd
*
cmd_
;
bool
valid_
;
bool
valid_
;
};
};
/*
* kv
*/
class
SetCmd
:
public
Cmd
{
public:
enum
SetCondition
{
ANY
,
NX
,
XX
};
SetCmd
()
:
Cmd
(
CmdNameSet
,
-
2
,
CmdFlagsWrite
|
CmdFlagsKv
),
sec_
(
0
),
condition_
(
ANY
)
{};
int16_t
Do
(
PikaCmdArgsType
&
argvs
,
std
::
string
&
ret
);
private:
std
::
string
key_
;
std
::
string
value_
;
int64_t
sec_
;
SetCmd
::
SetCondition
condition_
;
bool
Initial
(
PikaCmdArgsType
&
argvs
,
std
::
string
&
ret
);
};
#endif
#endif
include/pika_kv.h
0 → 100644
浏览文件 @
81086283
#ifndef __PIKA_KV_H__
#define __PIKA_KV_H__
#include "pika_command.h"
/*
* kv
*/
class
SetCmd
:
public
Cmd
{
public:
enum
SetCondition
{
ANY
,
NX
,
XX
};
SetCmd
()
:
sec_
(
0
),
condition_
(
ANY
)
{};
int16_t
Do
(
PikaCmdArgsType
&
argvs
,
std
::
string
&
ret
);
const
CmdInfo
&
cmd_info
()
{
return
info_
;
}
private:
static
const
CmdInfo
info_
;
std
::
string
key_
;
std
::
string
value_
;
int64_t
sec_
;
SetCmd
::
SetCondition
condition_
;
bool
Initial
(
PikaCmdArgsType
&
argvs
,
std
::
string
&
ret
);
};
#endif
src/pika_command.cc
浏览文件 @
81086283
#include <algorithm>
#include <algorithm>
#include "pika_
command
.h"
#include "pika_
kv
.h"
Cmd
*
CmdGenerator
::
getCmd
(
const
std
::
string
&
opt
)
{
const
CmdInfo
SetCmd
::
info_
(
CmdNameSet
,
-
2
,
CmdFlagsWrite
|
CmdFlagsKv
);
Cmd
*
getCmd
(
const
std
::
string
&
opt
)
{
Cmd
*
cmd
=
NULL
;
Cmd
*
cmd
=
NULL
;
if
(
opt
==
CmdNameSet
)
{
if
(
opt
==
CmdNameSet
)
{
cmd
=
new
SetCmd
();
cmd
=
new
SetCmd
();
...
@@ -10,7 +12,8 @@ Cmd* CmdGenerator::getCmd(const std::string& opt) {
...
@@ -10,7 +12,8 @@ Cmd* CmdGenerator::getCmd(const std::string& opt) {
}
}
return
cmd
;
return
cmd
;
}
}
std
::
string
Cmd
::
PopArg
(
PikaCmdArgsType
&
argv
,
bool
keyword
)
{
std
::
string
PopArg
(
PikaCmdArgsType
&
argv
,
bool
keyword
)
{
std
::
string
next
=
argv
.
front
();
std
::
string
next
=
argv
.
front
();
argv
.
pop_front
();
argv
.
pop_front
();
if
(
keyword
)
{
if
(
keyword
)
{
...
@@ -19,11 +22,3 @@ std::string Cmd::PopArg(PikaCmdArgsType& argv, bool keyword) {
...
@@ -19,11 +22,3 @@ std::string Cmd::PopArg(PikaCmdArgsType& argv, bool keyword) {
return
next
;
return
next
;
}
}
bool
Cmd
::
CheckArg
(
const
PikaCmdArgsType
&
argv
)
{
if
((
arity_
>
0
&&
(
int
)
argv
.
size
()
!=
arity_
)
||
(
arity_
<
0
&&
(
int
)
argv
.
size
()
<
-
arity_
))
{
return
false
;
}
return
true
;
}
src/pika_kv.cc
浏览文件 @
81086283
#include "nemo.h"
#include "nemo.h"
#include "pika_command.h"
#include "pika_kv.h"
//#include "pika_server.h"
#include <algorithm>
#include <algorithm>
//class PikaServer {
//public:
// nemo::Nemo* GetHandle() {return db_;}
//private:
// nemo::Nemo *db_;
//};
//extern int string2l(const char *s, size_t slen, long *value);
extern
PikaServer
*
g_pikaServer
;
extern
PikaServer
*
g_pikaServer
;
bool
SetCmd
::
Initial
(
PikaCmdArgsType
&
argv
,
std
::
string
&
ret
)
{
bool
SetCmd
::
Initial
(
PikaCmdArgsType
&
argv
,
std
::
string
&
ret
)
{
if
(
!
CheckArg
(
argv
))
{
if
(
!
info_
.
CheckArg
(
argv
.
size
()
))
{
ret
=
"-ERR wrong number of arguments for "
+
name
()
+
" command
\r\n
"
;
ret
=
"-ERR wrong number of arguments for "
+
info_
.
name
()
+
" command
\r\n
"
;
return
false
;
return
false
;
}
}
key_
=
PopArg
(
argv
);
key_
=
PopArg
(
argv
);
...
@@ -58,6 +50,7 @@ int16_t SetCmd::Do(PikaCmdArgsType &argv, std::string &ret) {
...
@@ -58,6 +50,7 @@ int16_t SetCmd::Do(PikaCmdArgsType &argv, std::string &ret) {
break
;
break
;
default:
default:
s
=
g_pikaServer
->
GetHandle
()
->
Set
(
key_
,
value_
,
sec_
);
s
=
g_pikaServer
->
GetHandle
()
->
Set
(
key_
,
value_
,
sec_
);
break
;
}
}
if
(
s
.
ok
()
||
s
.
IsNotFound
())
{
if
(
s
.
ok
()
||
s
.
IsNotFound
())
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录