Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
magicwindyyd
mindspore
提交
116535b2
M
mindspore
项目概览
magicwindyyd
/
mindspore
与 Fork 源项目一致
Fork自
MindSpore / mindspore
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
M
mindspore
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
116535b2
编写于
9月 08, 2020
作者:
X
xuyongfei
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
serving: codex
上级
2a9c4588
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
51 addition
and
31 deletion
+51
-31
include/infer_tensor.h
include/infer_tensor.h
+11
-0
include/inference.h
include/inference.h
+2
-0
serving/acl/dvpp_process.cc
serving/acl/dvpp_process.cc
+1
-1
serving/core/http_process.cc
serving/core/http_process.cc
+19
-17
serving/core/server.cc
serving/core/server.cc
+3
-2
serving/core/serving_tensor.h
serving/core/serving_tensor.h
+4
-0
serving/core/util/option_parser.cc
serving/core/util/option_parser.cc
+10
-10
serving/example/cpp_client/ms_client.cc
serving/example/cpp_client/ms_client.cc
+1
-1
未找到文件。
include/infer_tensor.h
浏览文件 @
116535b2
...
...
@@ -107,6 +107,7 @@ class InferTensor : public InferTensorBase {
public:
InferTensor
()
=
default
;
~
InferTensor
()
=
default
;
InferTensor
(
DataType
type
,
std
::
vector
<
int64_t
>
shape
,
const
void
*
data
,
size_t
data_len
)
{
set_data_type
(
type
);
set_shape
(
shape
);
...
...
@@ -131,6 +132,8 @@ class InferTensor : public InferTensorBase {
class
InferImagesBase
{
public:
InferImagesBase
()
=
default
;
virtual
~
InferImagesBase
()
=
default
;
virtual
size_t
batch_size
()
const
=
0
;
virtual
bool
get
(
size_t
index
,
const
void
*&
pic_buffer
,
uint32_t
&
pic_size
)
const
=
0
;
virtual
size_t
input_index
()
const
=
0
;
// the index of images as input in model
...
...
@@ -138,18 +141,24 @@ class InferImagesBase {
class
RequestBase
{
public:
RequestBase
()
=
default
;
virtual
~
RequestBase
()
=
default
;
virtual
size_t
size
()
const
=
0
;
virtual
const
InferTensorBase
*
operator
[](
size_t
index
)
const
=
0
;
};
class
ImagesRequestBase
{
public:
ImagesRequestBase
()
=
default
;
virtual
~
ImagesRequestBase
()
=
default
;
virtual
size_t
size
()
const
=
0
;
virtual
const
InferImagesBase
*
operator
[](
size_t
index
)
const
=
0
;
};
class
ReplyBase
{
public:
ReplyBase
()
=
default
;
virtual
~
ReplyBase
()
=
default
;
virtual
size_t
size
()
const
=
0
;
virtual
InferTensorBase
*
operator
[](
size_t
index
)
=
0
;
virtual
const
InferTensorBase
*
operator
[](
size_t
index
)
const
=
0
;
...
...
@@ -160,6 +169,7 @@ class ReplyBase {
class
VectorInferTensorWrapReply
:
public
ReplyBase
{
public:
explicit
VectorInferTensorWrapReply
(
std
::
vector
<
InferTensor
>
&
tensor_list
)
:
tensor_list_
(
tensor_list
)
{}
~
VectorInferTensorWrapReply
()
=
default
;
size_t
size
()
const
{
return
tensor_list_
.
size
();
}
InferTensorBase
*
operator
[](
size_t
index
)
{
...
...
@@ -187,6 +197,7 @@ class VectorInferTensorWrapReply : public ReplyBase {
class
VectorInferTensorWrapRequest
:
public
RequestBase
{
public:
explicit
VectorInferTensorWrapRequest
(
const
std
::
vector
<
InferTensor
>
&
tensor_list
)
:
tensor_list_
(
tensor_list
)
{}
~
VectorInferTensorWrapRequest
()
=
default
;
size_t
size
()
const
{
return
tensor_list_
.
size
();
}
const
InferTensorBase
*
operator
[](
size_t
index
)
const
{
...
...
include/inference.h
浏览文件 @
116535b2
...
...
@@ -33,6 +33,8 @@ class Status {
Status
()
:
status_code_
(
FAILED
)
{}
Status
(
enum
StatusCode
status_code
,
const
std
::
string
&
status_msg
=
""
)
:
status_code_
(
status_code
),
status_msg_
(
status_msg
)
{}
~
Status
()
=
default
;
bool
IsSuccess
()
const
{
return
status_code_
==
SUCCESS
;
}
enum
StatusCode
StatusCode
()
const
{
return
status_code_
;
}
std
::
string
StatusMessage
()
const
{
return
status_msg_
;
}
...
...
serving/acl/dvpp_process.cc
浏览文件 @
116535b2
...
...
@@ -233,7 +233,7 @@ Status DvppProcess::InputInputBuffer(const void *pic_buffer, size_t pic_buffer_s
}
static
void
JpegErrorExitCustom
(
j_common_ptr
cinfo
)
{
char
jpeg_last_error_msg
[
JMSG_LENGTH_MAX
];
char
jpeg_last_error_msg
[
JMSG_LENGTH_MAX
]
=
{
0
}
;
if
(
cinfo
!=
nullptr
&&
cinfo
->
err
!=
nullptr
&&
cinfo
->
err
->
format_message
!=
nullptr
)
{
(
*
(
cinfo
->
err
->
format_message
))(
cinfo
,
jpeg_last_error_msg
);
}
...
...
serving/core/http_process.cc
浏览文件 @
116535b2
...
...
@@ -42,7 +42,7 @@ enum HTTP_DATA_TYPE { HTTP_DATA_NONE, HTTP_DATA_INT, HTTP_DATA_FLOAT };
static
const
std
::
map
<
inference
::
DataType
,
HTTP_DATA_TYPE
>
infer_type2_http_type
{
{
inference
::
DataType
::
kMSI_Int32
,
HTTP_DATA_INT
},
{
inference
::
DataType
::
kMSI_Float32
,
HTTP_DATA_FLOAT
}};
Status
GetPostMessage
(
struct
evhttp_request
*
req
,
std
::
string
*
buf
)
{
Status
GetPostMessage
(
struct
evhttp_request
*
const
req
,
std
::
string
*
const
buf
)
{
Status
status
(
SUCCESS
);
size_t
post_size
=
evbuffer_get_length
(
req
->
input_buffer
);
if
(
post_size
==
0
)
{
...
...
@@ -57,7 +57,8 @@ Status GetPostMessage(struct evhttp_request *req, std::string *buf) {
return
status
;
}
}
Status
CheckRequestValid
(
struct
evhttp_request
*
http_request
)
{
Status
CheckRequestValid
(
struct
evhttp_request
*
const
http_request
)
{
Status
status
(
SUCCESS
);
switch
(
evhttp_request_get_command
(
http_request
))
{
case
EVHTTP_REQ_POST
:
...
...
@@ -68,7 +69,7 @@ Status CheckRequestValid(struct evhttp_request *http_request) {
}
}
void
ErrorMessage
(
struct
evhttp_request
*
req
,
Status
status
)
{
void
ErrorMessage
(
struct
evhttp_request
*
const
req
,
Status
status
)
{
json
error_json
=
{{
"error_message"
,
status
.
StatusMessage
()}};
std
::
string
out_error_str
=
error_json
.
dump
();
struct
evbuffer
*
retbuff
=
evbuffer_new
();
...
...
@@ -77,7 +78,7 @@ void ErrorMessage(struct evhttp_request *req, Status status) {
evbuffer_free
(
retbuff
);
}
Status
CheckMessageValid
(
const
json
&
message_info
,
HTTP_TYPE
*
type
)
{
Status
CheckMessageValid
(
const
json
&
message_info
,
HTTP_TYPE
*
const
type
)
{
Status
status
(
SUCCESS
);
int
count
=
0
;
if
(
message_info
.
find
(
HTTP_DATA
)
!=
message_info
.
end
())
{
...
...
@@ -95,7 +96,7 @@ Status CheckMessageValid(const json &message_info, HTTP_TYPE *type) {
return
status
;
}
Status
GetDataFromJson
(
const
json
&
json_data_array
,
ServingTensor
*
request_tensor
,
size_t
data_index
,
Status
GetDataFromJson
(
const
json
&
json_data_array
,
ServingTensor
*
const
request_tensor
,
size_t
data_index
,
HTTP_DATA_TYPE
type
)
{
Status
status
(
SUCCESS
);
auto
type_name
=
[](
const
json
&
json_data
)
->
std
::
string
{
...
...
@@ -133,7 +134,7 @@ Status GetDataFromJson(const json &json_data_array, ServingTensor *request_tenso
return
SUCCESS
;
}
Status
RecusiveGetTensor
(
const
json
&
json_data
,
size_t
depth
,
ServingTensor
*
request_tensor
,
size_t
data_index
,
Status
RecusiveGetTensor
(
const
json
&
json_data
,
size_t
depth
,
ServingTensor
*
const
request_tensor
,
size_t
data_index
,
HTTP_DATA_TYPE
type
)
{
Status
status
(
SUCCESS
);
std
::
vector
<
int64_t
>
required_shape
=
request_tensor
->
shape
();
...
...
@@ -185,7 +186,7 @@ std::vector<int64_t> GetJsonArrayShape(const json &json_array) {
return
json_shape
;
}
Status
TransDataToPredictRequest
(
const
json
&
message_info
,
PredictRequest
*
request
)
{
Status
TransDataToPredictRequest
(
const
json
&
message_info
,
PredictRequest
*
const
request
)
{
Status
status
=
SUCCESS
;
auto
tensors
=
message_info
.
find
(
HTTP_DATA
);
if
(
tensors
==
message_info
.
end
())
{
...
...
@@ -241,7 +242,7 @@ Status TransDataToPredictRequest(const json &message_info, PredictRequest *reque
return
SUCCESS
;
}
Status
TransTensorToPredictRequest
(
const
json
&
message_info
,
PredictRequest
*
request
)
{
Status
TransTensorToPredictRequest
(
const
json
&
message_info
,
PredictRequest
*
const
request
)
{
Status
status
(
SUCCESS
);
auto
tensors
=
message_info
.
find
(
HTTP_TENSOR
);
if
(
tensors
==
message_info
.
end
())
{
...
...
@@ -291,7 +292,8 @@ Status TransTensorToPredictRequest(const json &message_info, PredictRequest *req
return
status
;
}
Status
TransHTTPMsgToPredictRequest
(
struct
evhttp_request
*
http_request
,
PredictRequest
*
request
,
HTTP_TYPE
*
type
)
{
Status
TransHTTPMsgToPredictRequest
(
struct
evhttp_request
*
const
http_request
,
PredictRequest
*
const
request
,
HTTP_TYPE
*
const
type
)
{
Status
status
=
CheckRequestValid
(
http_request
);
if
(
status
!=
SUCCESS
)
{
return
status
;
...
...
@@ -352,7 +354,7 @@ Status TransHTTPMsgToPredictRequest(struct evhttp_request *http_request, Predict
return
status
;
}
Status
GetJsonFromTensor
(
const
ms_serving
::
Tensor
&
tensor
,
int
len
,
int
*
pos
,
json
*
out_json
)
{
Status
GetJsonFromTensor
(
const
ms_serving
::
Tensor
&
tensor
,
int
len
,
int
*
const
pos
,
json
*
const
out_json
)
{
Status
status
(
SUCCESS
);
switch
(
tensor
.
tensor_type
())
{
case
ms_serving
::
MS_INT32
:
{
...
...
@@ -366,7 +368,7 @@ Status GetJsonFromTensor(const ms_serving::Tensor &tensor, int len, int *pos, js
case
ms_serving
::
MS_FLOAT32
:
{
auto
data
=
reinterpret_cast
<
const
float
*>
(
tensor
.
data
().
data
())
+
*
pos
;
std
::
vector
<
float
>
result_tensor
(
len
);
memcpy_s
(
result_tensor
.
data
(),
result_tensor
.
size
()
*
sizeof
(
float
),
data
,
len
*
sizeof
(
float
));
(
void
)
memcpy_s
(
result_tensor
.
data
(),
result_tensor
.
size
()
*
sizeof
(
float
),
data
,
len
*
sizeof
(
float
));
*
out_json
=
std
::
move
(
result_tensor
);
*
pos
+=
len
;
break
;
...
...
@@ -378,7 +380,7 @@ Status GetJsonFromTensor(const ms_serving::Tensor &tensor, int len, int *pos, js
return
status
;
}
Status
TransPredictReplyToData
(
const
PredictReply
&
reply
,
json
*
out_json
)
{
Status
TransPredictReplyToData
(
const
PredictReply
&
reply
,
json
*
const
out_json
)
{
Status
status
(
SUCCESS
);
for
(
int
i
=
0
;
i
<
reply
.
result_size
();
i
++
)
{
(
*
out_json
)[
"data"
].
push_back
(
json
());
...
...
@@ -396,7 +398,7 @@ Status TransPredictReplyToData(const PredictReply &reply, json *out_json) {
return
status
;
}
Status
RecusiveGetJson
(
const
ms_serving
::
Tensor
&
tensor
,
int
depth
,
int
*
pos
,
json
*
out_json
)
{
Status
RecusiveGetJson
(
const
ms_serving
::
Tensor
&
tensor
,
int
depth
,
int
*
const
pos
,
json
*
const
out_json
)
{
Status
status
(
SUCCESS
);
if
(
depth
>=
10
)
{
ERROR_INFER_STATUS
(
status
,
FAILED
,
"result tensor shape dims is larger than 10"
);
...
...
@@ -420,7 +422,7 @@ Status RecusiveGetJson(const ms_serving::Tensor &tensor, int depth, int *pos, js
return
status
;
}
Status
TransPredictReplyToTensor
(
const
PredictReply
&
reply
,
json
*
out_json
)
{
Status
TransPredictReplyToTensor
(
const
PredictReply
&
reply
,
json
*
const
out_json
)
{
Status
status
(
SUCCESS
);
for
(
int
i
=
0
;
i
<
reply
.
result_size
();
i
++
)
{
(
*
out_json
)[
"tensor"
].
push_back
(
json
());
...
...
@@ -434,7 +436,7 @@ Status TransPredictReplyToTensor(const PredictReply &reply, json *out_json) {
return
status
;
}
Status
TransPredictReplyToHTTPMsg
(
const
PredictReply
&
reply
,
const
HTTP_TYPE
&
type
,
struct
evbuffer
*
buf
)
{
Status
TransPredictReplyToHTTPMsg
(
const
PredictReply
&
reply
,
const
HTTP_TYPE
&
type
,
struct
evbuffer
*
const
buf
)
{
Status
status
(
SUCCESS
);
json
out_json
;
switch
(
type
)
{
...
...
@@ -454,7 +456,7 @@ Status TransPredictReplyToHTTPMsg(const PredictReply &reply, const HTTP_TYPE &ty
return
status
;
}
Status
HttpHandleMsgDetail
(
struct
evhttp_request
*
req
,
void
*
arg
,
struct
evbuffer
*
retbuff
)
{
Status
HttpHandleMsgDetail
(
struct
evhttp_request
*
const
req
,
void
*
const
arg
,
struct
evbuffer
*
const
retbuff
)
{
PredictRequest
request
;
PredictReply
reply
;
HTTP_TYPE
type
;
...
...
@@ -482,7 +484,7 @@ Status HttpHandleMsgDetail(struct evhttp_request *req, void *arg, struct evbuffe
return
SUCCESS
;
}
void
http_handler_msg
(
struct
evhttp_request
*
req
,
void
*
arg
)
{
void
http_handler_msg
(
struct
evhttp_request
*
const
req
,
void
*
const
arg
)
{
MSI_TIME_STAMP_START
(
TotalRestfulPredict
)
struct
evbuffer
*
retbuff
=
evbuffer_new
();
if
(
retbuff
==
nullptr
)
{
...
...
serving/core/server.cc
浏览文件 @
116535b2
...
...
@@ -44,6 +44,7 @@ namespace serving {
namespace
{
static
const
uint32_t
uint32max
=
0x7FFFFFFF
;
std
::
promise
<
void
>
exit_requested
;
static
const
char
kServerHttpIp
[]
=
"0.0.0.0"
;
void
ClearEnv
()
{
Session
::
Instance
().
Clear
();
}
void
HandleSignal
(
int
sig
)
{
exit_requested
.
set_value
();
}
...
...
@@ -195,7 +196,7 @@ Status Server::BuildAndStart() {
return
res
;
}
auto
option_args
=
Options
::
Instance
().
GetArgs
();
std
::
string
server_address
=
"0.0.0.0
:"
+
std
::
to_string
(
option_args
->
grpc_port
);
std
::
string
server_address
=
std
::
string
(
kServerHttpIp
)
+
"
:"
+
std
::
to_string
(
option_args
->
grpc_port
);
auto
http_server_new_ret
=
NewHttpServer
();
struct
evhttp
*
http_server
=
http_server_new_ret
.
first
;
...
...
@@ -211,7 +212,7 @@ Status Server::BuildAndStart() {
event_base_free
(
eb
);
};
int32_t
http_port
=
option_args
->
rest_api_port
;
std
::
string
http_addr
=
"0.0.0.0"
;
std
::
string
http_addr
=
kServerHttpIp
;
evhttp_set_timeout
(
http_server
,
60
);
evhttp_set_gencb
(
http_server
,
http_handler_msg
,
nullptr
);
...
...
serving/core/serving_tensor.h
浏览文件 @
116535b2
...
...
@@ -50,6 +50,7 @@ class MS_API ServingTensor : public inference::InferTensorBase {
class
ServingImages
:
public
inference
::
InferImagesBase
{
public:
explicit
ServingImages
(
const
ms_serving
::
Images
&
images
);
~
ServingImages
()
=
default
;
size_t
batch_size
()
const
override
;
bool
get
(
size_t
index
,
const
void
*&
pic_buffer
,
uint32_t
&
pic_size
)
const
override
;
...
...
@@ -62,6 +63,7 @@ class ServingImages : public inference::InferImagesBase {
class
ServingRequest
:
public
inference
::
RequestBase
{
public:
explicit
ServingRequest
(
const
ms_serving
::
PredictRequest
&
request
);
~
ServingRequest
()
=
default
;
size_t
size
()
const
override
;
const
inference
::
InferTensorBase
*
operator
[](
size_t
index
)
const
override
;
...
...
@@ -74,6 +76,7 @@ class ServingRequest : public inference::RequestBase {
class
ServingReply
:
public
inference
::
ReplyBase
{
public:
explicit
ServingReply
(
ms_serving
::
PredictReply
&
reply
)
:
reply_
(
reply
)
{}
~
ServingReply
()
=
default
;
size_t
size
()
const
override
;
inference
::
InferTensorBase
*
operator
[](
size_t
index
)
override
;
...
...
@@ -89,6 +92,7 @@ class ServingReply : public inference::ReplyBase {
class
ServingImagesRequest
:
public
inference
::
ImagesRequestBase
{
public:
explicit
ServingImagesRequest
(
const
ms_serving
::
PredictRequest
&
request
);
~
ServingImagesRequest
()
=
default
;
size_t
size
()
const
override
;
const
inference
::
InferImagesBase
*
operator
[](
size_t
index
)
const
override
;
...
...
serving/core/util/option_parser.cc
浏览文件 @
116535b2
...
...
@@ -29,13 +29,13 @@ bool StartWith(const std::string &str, const std::string &expected) {
(
str
.
size
()
>=
expected
.
size
()
&&
memcmp
(
str
.
data
(),
expected
.
data
(),
expected
.
size
())
==
0
);
}
bool
RemovePrefix
(
std
::
string
*
str
,
const
std
::
string
&
prefix
)
{
bool
RemovePrefix
(
std
::
string
*
const
str
,
const
std
::
string
&
prefix
)
{
if
(
!
StartWith
(
*
str
,
prefix
))
return
false
;
str
->
replace
(
str
->
begin
(),
str
->
begin
()
+
prefix
.
size
(),
""
);
return
true
;
}
bool
Option
::
ParseInt32
(
std
::
string
*
arg
)
{
bool
Option
::
ParseInt32
(
std
::
string
*
const
arg
)
{
if
(
RemovePrefix
(
arg
,
"--"
)
&&
RemovePrefix
(
arg
,
name_
)
&&
RemovePrefix
(
arg
,
"="
))
{
int32_t
parsed_value
;
try
{
...
...
@@ -50,7 +50,7 @@ bool Option::ParseInt32(std::string *arg) {
return
false
;
}
bool
Option
::
ParseBool
(
std
::
string
*
arg
)
{
bool
Option
::
ParseBool
(
std
::
string
*
const
arg
)
{
if
(
RemovePrefix
(
arg
,
"--"
)
&&
RemovePrefix
(
arg
,
name_
)
&&
RemovePrefix
(
arg
,
"="
))
{
if
(
*
arg
==
"true"
)
{
*
bool_default_
=
true
;
...
...
@@ -66,7 +66,7 @@ bool Option::ParseBool(std::string *arg) {
return
false
;
}
bool
Option
::
ParseString
(
std
::
string
*
arg
)
{
bool
Option
::
ParseString
(
std
::
string
*
const
arg
)
{
if
(
RemovePrefix
(
arg
,
"--"
)
&&
RemovePrefix
(
arg
,
name_
)
&&
RemovePrefix
(
arg
,
"="
))
{
*
string_default_
=
*
arg
;
return
true
;
...
...
@@ -74,7 +74,7 @@ bool Option::ParseString(std::string *arg) {
return
false
;
}
bool
Option
::
ParseFloat
(
std
::
string
*
arg
)
{
bool
Option
::
ParseFloat
(
std
::
string
*
const
arg
)
{
if
(
RemovePrefix
(
arg
,
"--"
)
&&
RemovePrefix
(
arg
,
name_
)
&&
RemovePrefix
(
arg
,
"="
))
{
float
parsed_value
;
try
{
...
...
@@ -89,7 +89,7 @@ bool Option::ParseFloat(std::string *arg) {
return
false
;
}
Option
::
Option
(
const
std
::
string
&
name
,
int32_t
*
default_point
,
const
std
::
string
&
usage
)
Option
::
Option
(
const
std
::
string
&
name
,
int32_t
*
const
default_point
,
const
std
::
string
&
usage
)
:
name_
(
name
),
type_
(
MS_TYPE_INT32
),
int32_default_
(
default_point
),
...
...
@@ -98,7 +98,7 @@ Option::Option(const std::string &name, int32_t *default_point, const std::strin
float_default_
(
nullptr
),
usage_
(
usage
)
{}
Option
::
Option
(
const
std
::
string
&
name
,
bool
*
default_point
,
const
std
::
string
&
usage
)
Option
::
Option
(
const
std
::
string
&
name
,
bool
*
const
default_point
,
const
std
::
string
&
usage
)
:
name_
(
name
),
type_
(
MS_TYPE_BOOL
),
int32_default_
(
nullptr
),
...
...
@@ -107,7 +107,7 @@ Option::Option(const std::string &name, bool *default_point, const std::string &
float_default_
(
nullptr
),
usage_
(
usage
)
{}
Option
::
Option
(
const
std
::
string
&
name
,
std
::
string
*
default_point
,
const
std
::
string
&
usage
)
Option
::
Option
(
const
std
::
string
&
name
,
std
::
string
*
const
default_point
,
const
std
::
string
&
usage
)
:
name_
(
name
),
type_
(
MS_TYPE_STRING
),
int32_default_
(
nullptr
),
...
...
@@ -116,7 +116,7 @@ Option::Option(const std::string &name, std::string *default_point, const std::s
float_default_
(
nullptr
),
usage_
(
usage
)
{}
Option
::
Option
(
const
std
::
string
&
name
,
float
*
default_point
,
const
std
::
string
&
usage
)
Option
::
Option
(
const
std
::
string
&
name
,
float
*
const
default_point
,
const
std
::
string
&
usage
)
:
name_
(
name
),
type_
(
MS_TYPE_FLOAT
),
int32_default_
(
nullptr
),
...
...
@@ -125,7 +125,7 @@ Option::Option(const std::string &name, float *default_point, const std::string
float_default_
(
default_point
),
usage_
(
usage
)
{}
bool
Option
::
Parse
(
std
::
string
*
arg
)
{
bool
Option
::
Parse
(
std
::
string
*
const
arg
)
{
bool
result
=
false
;
switch
(
type_
)
{
case
MS_TYPE_BOOL
:
...
...
serving/example/cpp_client/ms_client.cc
浏览文件 @
116535b2
...
...
@@ -93,7 +93,7 @@ int main(int argc, char **argv) {
size_t
start_pos
=
arg_val
.
find
(
arg_target_str
);
if
(
start_pos
!=
std
::
string
::
npos
)
{
start_pos
+=
arg_target_str
.
size
();
if
(
arg_val
[
start_pos
]
==
'='
)
{
if
(
start_pos
<
arg_val
.
size
()
&&
arg_val
[
start_pos
]
==
'='
)
{
target_str
=
arg_val
.
substr
(
start_pos
+
1
);
}
else
{
std
::
cout
<<
"The only correct argument syntax is --target="
<<
std
::
endl
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录