constructor method
| 49 | |
| 50 | // constructor method |
| 51 | int UnitPy::PyInit(PyObject* args, PyObject* /*kwd*/) |
| 52 | { |
| 53 | PyObject* object {}; |
| 54 | Unit* self = getUnitPtr(); |
| 55 | |
| 56 | // get quantity |
| 57 | if (PyArg_ParseTuple(args, "O!", &(QuantityPy::Type), &object)) { |
| 58 | *self = static_cast<QuantityPy*>(object)->getQuantityPtr()->getUnit(); |
| 59 | return 0; |
| 60 | } |
| 61 | PyErr_Clear(); // set by PyArg_ParseTuple() |
| 62 | |
| 63 | // get unit |
| 64 | if (PyArg_ParseTuple(args, "O!", &(UnitPy::Type), &object)) { |
| 65 | *self = *(static_cast<UnitPy*>(object)->getUnitPtr()); |
| 66 | return 0; |
| 67 | } |
| 68 | PyErr_Clear(); // set by PyArg_ParseTuple() |
| 69 | |
| 70 | // get string |
| 71 | char* string {}; |
| 72 | if (PyArg_ParseTuple(args, "et", "utf-8", &string)) { |
| 73 | std::string str(string); |
| 74 | PyMem_Free(string); |
| 75 | try { |
| 76 | *self = Quantity::parse(str).getUnit(); |
| 77 | return 0; |
| 78 | } |
| 79 | catch (const ParserError& e) { |
| 80 | PyErr_SetString(PyExc_ValueError, e.what()); |
| 81 | return -1; |
| 82 | } |
| 83 | } |
| 84 | PyErr_Clear(); // set by PyArg_ParseTuple() |
| 85 | |
| 86 | int i1 {0}; |
| 87 | int i2 {0}; |
| 88 | int i3 {0}; |
| 89 | int i4 {0}; |
| 90 | int i5 {0}; |
| 91 | int i6 {0}; |
| 92 | int i7 {0}; |
| 93 | int i8 {0}; |
| 94 | if (PyArg_ParseTuple(args, "|iiiiiiii", &i1, &i2, &i3, &i4, &i5, &i6, &i7, &i8)) { |
| 95 | try { |
| 96 | *self = Unit(i1, i2, i3, i4, i5, i6, i7, i8); |
| 97 | return 0; |
| 98 | } |
| 99 | catch (const OverflowError& e) { |
| 100 | PyErr_SetString(PyExc_OverflowError, e.what()); |
| 101 | return -1; |
| 102 | } |
| 103 | catch (const UnderflowError& e) { |
| 104 | PyErr_SetString(PyExc_OverflowError, e.what()); |
| 105 | return -1; |
| 106 | } |
| 107 | } |
| 108 |