@@ -600,6 +600,64 @@ PIKA_RES list_append(PikaList* self, Arg* arg) {
600
600
return args_setInt (& self -> super , "top" , top + 1 );
601
601
}
602
602
603
+ Arg * list_pop (PikaList * list ) {
604
+ int top = args_getInt (& list -> super , "top" );
605
+ if (top <= 0 ) {
606
+ return NULL ;
607
+ }
608
+ Arg * arg = list_getArg (list , top - 1 );
609
+ Arg * res = arg_copy (arg );
610
+ args_removeArg (& list -> super , arg );
611
+ args_setInt (& list -> super , "top" , top - 1 );
612
+ return res ;
613
+ }
614
+
615
+ PIKA_RES list_remove (PikaList * list , Arg * arg ) {
616
+ int top = args_getInt (& list -> super , "top" );
617
+ int i_remove = 0 ;
618
+ if (top <= 0 ) {
619
+ return PIKA_RES_ERR_OUT_OF_RANGE ;
620
+ }
621
+ for (int i = 0 ; i < top ; i ++ ) {
622
+ Arg * arg_now = list_getArg (list , i );
623
+ if (arg_isEqual (arg_now , arg )) {
624
+ i_remove = i ;
625
+ args_removeArg (& list -> super , arg_now );
626
+ break ;
627
+ }
628
+ }
629
+ /* move args */
630
+ for (int i = i_remove + 1 ; i < top ; i ++ ) {
631
+ char buff [11 ];
632
+ char * i_str = fast_itoa (buff , i - 1 );
633
+ Arg * arg_now = list_getArg (list , i );
634
+ arg_setName (arg_now , i_str );
635
+ }
636
+ args_setInt (& list -> super , "top" , top - 1 );
637
+ return PIKA_RES_OK ;
638
+ }
639
+
640
+ PIKA_RES list_insert (PikaList * self , int index , Arg * arg ) {
641
+ int top = args_getInt (& self -> super , "top" );
642
+ if (index > top ) {
643
+ return PIKA_RES_ERR_OUT_OF_RANGE ;
644
+ }
645
+ /* move args */
646
+ for (int i = top - 1 ; i >= index ; i -- ) {
647
+ char buff [11 ];
648
+ char * i_str = fast_itoa (buff , i + 1 );
649
+ Arg * arg_now = list_getArg (self , i );
650
+ arg_setName (arg_now , i_str );
651
+ }
652
+ char buff [11 ];
653
+ char * i_str = fast_itoa (buff , index );
654
+ Arg * arg_to_push = arg_copy (arg );
655
+ arg_setName (arg_to_push , i_str );
656
+ args_setArg (& self -> super , arg_to_push );
657
+ args_setInt (& self -> super , "top" , top + 1 );
658
+ return PIKA_RES_OK ;
659
+ }
660
+
603
661
size_t list_getSize (PikaList * self ) {
604
662
pika_assert (NULL != self );
605
663
return args_getInt (& self -> super , "top" );
0 commit comments