blueloveTH 1 год назад
Родитель
Сommit
34c5fb8878
1 измененных файлов с 13 добавлено и 12 удалено
  1. 13 12
      src/modules/array2d.c

+ 13 - 12
src/modules/array2d.c

@@ -916,18 +916,13 @@ static void c11_chunked_array2d__del(c11_chunked_array2d* self, int col, int row
 }
 
 static bool chunked_array2d__new__(int argc, py_Ref argv) {
-    py_Type cls = py_totype(argv);
-    py_newobject(py_retval(), cls, 0, sizeof(c11_chunked_array2d));
-    return true;
-}
-
-static bool chunked_array2d__init__(int argc, py_Ref argv) {
-    c11_chunked_array2d* self = py_touserdata(&argv[0]);
+    PY_CHECK_ARGC(4);
     PY_CHECK_ARG_TYPE(1, tp_int);
+    py_Type cls = py_totype(argv);
+    c11_chunked_array2d* self = py_newobject(py_retval(), cls, 0, sizeof(c11_chunked_array2d));
     int chunk_size = py_toint(&argv[1]);
     self->default_T = argv[2];
     self->context_builder = argv[3];
-
     c11_chunked_array2d_chunks__ctor(&self->chunks);
     self->chunk_size = chunk_size;
     switch(chunk_size) {
@@ -947,7 +942,6 @@ static bool chunked_array2d__init__(int argc, py_Ref argv) {
     }
     self->chunk_size_mask = chunk_size - 1;
     memset(&self->last_visited, 0, sizeof(c11_chunked_array2d_chunks_KV));
-    py_newnone(py_retval());
     return true;
 }
 
@@ -1006,6 +1000,13 @@ static bool chunked_array2d__iter__(int argc, py_Ref argv) {
     return true;
 }
 
+static bool chunked_array2d__len__(int argc, py_Ref argv) {
+    PY_CHECK_ARGC(1);
+    c11_chunked_array2d* self = py_touserdata(argv);
+    py_newint(py_retval(), self->chunks.length);
+    return true;
+}
+
 static bool chunked_array2d__clear(int argc, py_Ref argv) {
     c11_chunked_array2d* self = py_touserdata(argv);
     c11_chunked_array2d_chunks__clear(&self->chunks);
@@ -1152,10 +1153,9 @@ static void register_chunked_array2d(py_Ref mod) {
     pk__tp_set_marker(type, c11_chunked_array2d__mark);
     assert(type == tp_chunked_array2d);
 
-    py_bind(py_tpobject(type), "__new__(cls, *args, **kwargs)", chunked_array2d__new__);
     py_bind(py_tpobject(type),
-            "__init__(self, chunk_size, default=None, context_builder=None)",
-            chunked_array2d__init__);
+            "__new__(cls, chunk_size, default=None, context_builder=None)",
+            chunked_array2d__new__);
 
     py_bindproperty(type, "chunk_size", chunked_array2d__chunk_size, NULL);
 
@@ -1163,6 +1163,7 @@ static void register_chunked_array2d(py_Ref mod) {
     py_bindmagic(type, __setitem__, chunked_array2d__setitem__);
     py_bindmagic(type, __delitem__, chunked_array2d__delitem__);
     py_bindmagic(type, __iter__, chunked_array2d__iter__);
+    py_bindmagic(type, __len__, chunked_array2d__len__);
 
     py_bindmethod(type, "clear", chunked_array2d__clear);
     py_bindmethod(type, "world_to_chunk", chunked_array2d__world_to_chunk);