blob: a8efc2f28005b80596ce830212c82f2f8e7c271d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
// vim: ts=8 sw=2 smarttab
#include <Python.h>
#include "PyUtil.h"
PyObject *get_python_typed_option_value(
Option::type_t type,
const std::string& value)
{
switch (type) {
case Option::TYPE_INT:
case Option::TYPE_UINT:
case Option::TYPE_SIZE:
return PyLong_FromString((char *)value.c_str(), nullptr, 0);
case Option::TYPE_SECS:
case Option::TYPE_MILLISECS:
case Option::TYPE_FLOAT:
{
PyObject *s = PyUnicode_FromString(value.c_str());
PyObject *f = PyFloat_FromString(s);
Py_DECREF(s);
return f;
}
case Option::TYPE_BOOL:
if (value == "1" || value == "true" || value == "True" ||
value == "on" || value == "yes") {
Py_INCREF(Py_True);
return Py_True;
} else {
Py_INCREF(Py_False);
return Py_False;
}
case Option::TYPE_STR:
case Option::TYPE_ADDR:
case Option::TYPE_ADDRVEC:
case Option::TYPE_UUID:
break;
}
return PyUnicode_FromString(value.c_str());
}
|