6161#include " fenix_data_member.hpp"
6262#include " fenix_data_packet.hpp"
6363
64+ namespace Fenix ::Data {
6465
66+ group_iterator find_group (int id, fenix_data_recovery_t * dr){
67+ int index = __fenix_search_groupid (id, dr);
68+ if (index == -1 ){
69+ debug_print (" ERROR: group_id <%d> does not exist\n " , id);
70+ return {index, nullptr };
71+ }
72+ return {index, dr->group [index]};
73+ }
74+
75+ } // end namespace Fenix::Data
76+
77+ using namespace Fenix ::Data;
78+
79+ member_iterator fenix_group_t::search_member (int id){
80+ for (int i = 0 ; i < members.size (); i++){
81+ if (members[i].memberid == id){
82+ return {i, &(members[i])};
83+ }
84+ }
85+ return {-1 , nullptr };
86+ }
87+
88+ member_iterator fenix_group_t::find_member (int id){
89+ auto it = search_member (id);
90+ if (it.first == -1 ) debug_print (" ERROR group <%d>: member_id <%d> does not exist\n " , groupid, id);
91+ return it;
92+ }
6593
6694/* *
6795 * @brief
@@ -85,51 +113,30 @@ fenix_data_recovery_t * __fenix_data_recovery_init() {
85113}
86114
87115int __fenix_member_delete (int groupid, int memberid) {
88- int retval = -1 ;
89- int group_index = __fenix_search_groupid (groupid, fenix.data_recovery );
90- int member_index = -1 ;
91- if (group_index !=-1 ){
92- member_index = __fenix_search_memberid (fenix.data_recovery ->group [group_index]->member , memberid);
93- }
116+ auto [group_index, group] = find_group (groupid);
117+ if (!group) return FENIX_ERROR_INVALID_GROUPID;
118+
119+ auto [member_index, mentry] = group->find_member (memberid);
120+ if (!mentry) return FENIX_ERROR_INVALID_MEMBERID;
94121
95122 if (fenix.options .verbose == 38 ) {
96123 verbose_print (" c-rank: %d, role: %d, group_index: %d, member_index: %d\n " ,
97124 __fenix_get_current_rank (fenix.new_world ), fenix.role , group_index,
98125 member_index);
99126 }
100127
101- if (group_index == -1 ) {
102- debug_print (" ERROR Fenix_Data_member_delete: group_id <%d> does not exist\n " ,
103- groupid);
104- retval = FENIX_ERROR_INVALID_GROUPID;
105- } else if (member_index == -1 ) {
106- debug_print (" ERROR Fenix_Data_member_delete: memberid <%d> does not exist\n " ,
107- memberid);
108- retval = FENIX_ERROR_INVALID_MEMBERID;
109- } else {
110- fenix_data_recovery_t *data_recovery = fenix.data_recovery ;
111- fenix_group_t *group = (data_recovery->group [group_index]);
112-
113- retval = group->vtbl .member_delete (group, memberid);
114-
115- if (retval == FENIX_SUCCESS){
116- fenix_member_t *member = group->member ;
117- member->count --;
118- fenix_member_entry_t *mentry = &(member->member_entry [member_index]);
119- mentry->state = DELETED;
120- }
128+ int retval = group->vtbl .member_delete (group, memberid);
121129
122- if (fenix.options .verbose == 38 ) {
123- fenix_member_t *member = group->member ;
124- fenix_member_entry_t *mentry = &(member->member_entry [member_index]);
125-
126- verbose_print (" c-rank: %d, role: %d, m-count: %zu, m-state: %d" ,
127- __fenix_get_current_rank (fenix.new_world ), fenix.role ,
128- member->count , mentry->state );
129- }
130+ if (retval == FENIX_SUCCESS){
131+ group->members .erase (group->members .begin ()+member_index);
132+ }
130133
131- retval = FENIX_SUCCESS;
134+ if (fenix.options .verbose == 38 ) {
135+ verbose_print (" c-rank: %d, role: %d, m-count: %zu" ,
136+ __fenix_get_current_rank (fenix.new_world ), fenix.role ,
137+ group->members .size ());
132138 }
139+
133140 return retval;
134141}
135142
@@ -150,8 +157,10 @@ int __fenix_group_delete_direct(fenix_group_t* group){
150157 return group->vtbl .group_delete (group);
151158}
152159
153- int __fenix_data_recovery_remove_group (fenix_data_recovery_t * data_recovery, int group_index){
160+ int __fenix_data_recovery_remove_group (int group_index){
154161 int retval = !FENIX_SUCCESS;
162+ auto data_recovery = fenix.data_recovery ;
163+
155164 if (group_index != -1 ){
156165 for (int index = group_index; index < data_recovery->count -1 ; index++){
157166 data_recovery->group [index] = data_recovery->group [index+1 ];
@@ -167,28 +176,21 @@ int __fenix_data_recovery_remove_group(fenix_data_recovery_t* data_recovery, int
167176 * @param group_id
168177 */
169178int __fenix_group_delete (int groupid) {
170- int retval = - 1 ;
171- int group_index = __fenix_search_groupid (groupid, fenix. data_recovery ) ;
179+ auto [group_index, group] = find_group (groupid) ;
180+ if (!group) return FENIX_ERROR_INVALID_GROUPID ;
172181
173182 if (fenix.options .verbose == 37 ) {
174183 verbose_print (" c-rank: %d, group_index: %d\n " ,
175184 __fenix_get_current_rank (fenix.new_world ), group_index);
176185 }
177186
178- if (group_index == -1 ) {
179- debug_print (" ERROR Fenix_Data_group_delete: group_id <%d> does not exist\n " , groupid);
180- retval = FENIX_ERROR_INVALID_GROUPID;
181- } else {
182- /* Delete Process */
183- fenix_data_recovery_t *data_recovery = fenix.data_recovery ;
184- fenix_group_t *group = (data_recovery->group [group_index]);
185- retval = __fenix_group_delete_direct (group);
186-
187- if (retval == FENIX_SUCCESS){
188- retval = __fenix_data_recovery_remove_group (data_recovery, group_index);
189- }
187+ /* Delete Process */
188+ int retval = __fenix_group_delete_direct (group);
190189
190+ if (retval == FENIX_SUCCESS){
191+ retval = __fenix_data_recovery_remove_group (group_index);
191192 }
193+
192194 return retval;
193195}
194196
0 commit comments