3838// TODO: Check for deinit
3939
4040//| class Peers:
41- //| """A class that provides peer managment functions. Sequence[Peer] ."""
41+ //| """Maintains a `list` of `Peer` internally and only exposes a subset of `list` methods ."""
4242//|
4343//| def __init__(self) -> None:
4444//| """You cannot create an instance of `Peers`."""
@@ -86,22 +86,7 @@ STATIC MP_DEFINE_CONST_DICT(espnow_peers_locals_dict, espnow_peers_locals_dict_t
8686STATIC void espnow_peers_print (const mp_print_t * print , mp_obj_t self_in , mp_print_kind_t kind ) {
8787 espnow_peers_obj_t * self = MP_OBJ_TO_PTR (self_in );
8888 mp_obj_list_t * list = MP_OBJ_TO_PTR (self -> list );
89- const char * item_separator = ", " ;
90- if (!(MICROPY_PY_UJSON && kind == PRINT_JSON )) {
91- kind = PRINT_REPR ;
92- } else {
93- #if MICROPY_PY_UJSON_SEPARATORS
94- item_separator = MP_PRINT_GET_EXT (print )-> item_separator ;
95- #endif
96- }
97- mp_print_str (print , "[" );
98- for (size_t i = 0 ; i < list -> len ; i ++ ) {
99- if (i > 0 ) {
100- mp_print_str (print , item_separator );
101- }
102- mp_obj_print_helper (print , list -> items [i ], kind );
103- }
104- mp_print_str (print , "]" );
89+ return list -> base .type -> print (print , self -> list , kind );
10590}
10691
10792/******************************************************************************/
@@ -110,20 +95,7 @@ STATIC void espnow_peers_print(const mp_print_t *print, mp_obj_t self_in, mp_pri
11095STATIC mp_obj_t espnow_peers_unary_op (mp_unary_op_t op , mp_obj_t self_in ) {
11196 espnow_peers_obj_t * self = MP_OBJ_TO_PTR (self_in );
11297 mp_obj_list_t * list = MP_OBJ_TO_PTR (self -> list );
113- switch (op ) {
114- case MP_UNARY_OP_BOOL :
115- return mp_obj_new_bool (list -> len != 0 );
116- case MP_UNARY_OP_LEN :
117- return MP_OBJ_NEW_SMALL_INT (list -> len );
118- #if MICROPY_PY_SYS_GETSIZEOF
119- case MP_UNARY_OP_SIZEOF : {
120- size_t sz = sizeof (* list ) + sizeof (mp_obj_t ) * list -> alloc ;
121- return MP_OBJ_NEW_SMALL_INT (sz );
122- }
123- #endif
124- default :
125- return MP_OBJ_NULL ; // op not supported
126- }
98+ return list -> base .type -> ext -> unary_op (op , self -> list );
12799}
128100
129101/******************************************************************************/
@@ -133,58 +105,18 @@ STATIC mp_obj_t espnow_peers_subscr(mp_obj_t self_in, mp_obj_t index, mp_obj_t v
133105 if (value != MP_OBJ_SENTINEL ) {
134106 return MP_OBJ_NULL ; // op not supported
135107 }
136-
137108 espnow_peers_obj_t * self = MP_OBJ_TO_PTR (self_in );
138109 mp_obj_list_t * list = MP_OBJ_TO_PTR (self -> list );
139-
140- // load
141- #if MICROPY_PY_BUILTINS_SLICE
142- if (mp_obj_is_type (index , & mp_type_slice )) {
143- mp_bound_slice_t slice ;
144- if (!mp_seq_get_fast_slice_indexes (list -> len , index , & slice )) {
145- return mp_seq_extract_slice (list -> len , list -> items , & slice );
146- }
147-
148- mp_obj_list_t * res = MP_OBJ_TO_PTR (mp_obj_new_list (slice .stop - slice .start , NULL ));
149- mp_seq_copy (res -> items , list -> items + slice .start , res -> len , mp_obj_t );
150- return MP_OBJ_FROM_PTR (res );
151- }
152- #endif
153- size_t index_val = mp_get_index (list -> base .type , list -> len , index , false);
154- return list -> items [index_val ];
110+ return list -> base .type -> ext -> subscr (self -> list , index , value );
155111}
156112
157113/******************************************************************************/
158114/* peers iterator */
159115
160- typedef struct _espnow_peers_it_t {
161- mp_obj_base_t base ;
162- mp_fun_1_t iternext ;
163- mp_obj_t peers ;
164- size_t cur ;
165- } espnow_peers_it_t ;
166-
167- STATIC mp_obj_t espnow_peers_it_iternext (mp_obj_t self_in ) {
168- espnow_peers_it_t * self = MP_OBJ_TO_PTR (self_in );
169- espnow_peers_obj_t * peers = MP_OBJ_TO_PTR (self -> peers );
170- mp_obj_list_t * list = MP_OBJ_TO_PTR (peers -> list );
171- if (self -> cur < list -> len ) {
172- mp_obj_t o_out = list -> items [self -> cur ];
173- self -> cur += 1 ;
174- return o_out ;
175- } else {
176- return MP_OBJ_STOP_ITERATION ;
177- }
178- }
179-
180- STATIC mp_obj_t espnow_peers_getiter (mp_obj_t o_in , mp_obj_iter_buf_t * iter_buf ) {
181- assert (sizeof (espnow_peers_it_t ) <= sizeof (mp_obj_iter_buf_t ));
182- espnow_peers_it_t * o = (espnow_peers_it_t * )iter_buf ;
183- o -> base .type = & mp_type_polymorph_iter ;
184- o -> iternext = espnow_peers_it_iternext ;
185- o -> peers = o_in ;
186- o -> cur = 0 ;
187- return MP_OBJ_FROM_PTR (o );
116+ STATIC mp_obj_t espnow_peers_getiter (mp_obj_t self_in , mp_obj_iter_buf_t * iter_buf ) {
117+ espnow_peers_obj_t * self = MP_OBJ_TO_PTR (self_in );
118+ mp_obj_list_t * list = MP_OBJ_TO_PTR (self -> list );
119+ return list -> base .type -> ext -> getiter (self -> list , iter_buf );
188120}
189121
190122espnow_peers_obj_t * espnow_peers_new (void ) {
0 commit comments