diff --git a/include/typings/array2d.pyi b/include/typings/array2d.pyi index b90943e3..0a7ea5e1 100644 --- a/include/typings/array2d.pyi +++ b/include/typings/array2d.pyi @@ -26,10 +26,8 @@ class array2d[T]: @overload def is_valid(self, pos: vec2i) -> bool: ... - @overload - def get[R](self, col: int, row: int, default: R) -> T | R: ... - @overload - def get[R](self, pos: vec2i, default: R) -> T | R: ... + def get[R](self, col: int, row: int, default: R = None) -> T | R: + """Gets the value at the given position. If the position is out of bounds, return the default value.""" @overload def __getitem__(self, index: tuple[int, int]) -> T: ... diff --git a/src/modules/array2d.c b/src/modules/array2d.c index cd58a366..4c010351 100644 --- a/src/modules/array2d.c +++ b/src/modules/array2d.c @@ -118,24 +118,17 @@ static bool array2d_is_valid(int argc, py_Ref argv) { static bool array2d_get(int argc, py_Ref argv) { py_Ref default_; c11_array2d* self = py_touserdata(argv); - int col, row; + PY_CHECK_ARG_TYPE(1, tp_int); + PY_CHECK_ARG_TYPE(2, tp_int); if(argc == 3) { - // get[R](self, pos: vec2i, default: R) -> T | R - PY_CHECK_ARG_TYPE(1, tp_vec2i); - c11_vec2i pos = py_tovec2i(py_arg(1)); - col = pos.x; - row = pos.y; - default_ = py_arg(2); + default_ = py_None(); } else if(argc == 4) { - // get(self, col: int, row: int, default: T) -> T - PY_CHECK_ARG_TYPE(1, tp_int); - PY_CHECK_ARG_TYPE(2, tp_int); - col = py_toint(py_arg(1)); - row = py_toint(py_arg(2)); default_ = py_arg(3); } else { - return TypeError("get() expected 3 or 4 arguments"); + return TypeError("get() expected 2 or 3 arguments"); } + int col = py_toint(py_arg(1)); + int row = py_toint(py_arg(2)); if(py_array2d_is_valid(self, col, row)) { py_assign(py_retval(), py_array2d__get(self, col, row)); } else {