MCPcopy Index your code
hub / github.com/assaultcube/AC / looplist

Function looplist

source/src/command.cpp:1148–1192  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1146}
1147
1148void looplist(char *list, char *varlist, char *body, bool withi)
1149{
1150 vector<char *> vars;
1151 explodelist(varlist, vars);
1152 if(vars.length() < 1) return;
1153 int columns = vars.length();
1154 if(withi) vars.add(newstring("i"));
1155 vector<ident *> ids;
1156 bool ok = true;
1157 loopv(vars) if(ids.add(newident(vars[i]))->type != ID_ALIAS) { conoutf("looplist error: \"%s\" is readonly", vars[i]); ok = false; }
1158 if(ok)
1159 {
1160 int ii = 0;
1161 vector<char *> elems;
1162 explodelist(list, elems);
1163 loopv(ids) pushident(*ids[i], newstring(""));
1164 loop_level++;
1165 if(elems.length() / columns > CSLIMIT_ITERATION) cslimiterr("loop iterations");
1166 else for(int i = 0; i <= elems.length() - columns; i += columns)
1167 {
1168 loopj(vars.length())
1169 {
1170 if(ids[j]->action != ids[j]->executing) delete[] ids[j]->action;
1171 if(j < columns)
1172 {
1173 ids[j]->action = elems[i + j];
1174 elems[i + j] = NULL;
1175 }
1176 else
1177 {
1178 defformatstring(sii)("%d", ii++);
1179 ids[j]->action = newstring(sii);
1180 }
1181 }
1182 execute(body);
1183 loop_skip = false;
1184 if(loop_break) break;
1185 }
1186 loopv(ids) popident(*ids[i]);
1187 loopv(elems) if(elems[i]) delete[] elems[i];
1188 loop_break = false;
1189 loop_level--;
1190 }
1191 loopv(vars) delete[] vars[i];
1192}
1193COMMANDF(looplist, "sss", (char *list, char *varlist, char *body) { looplist(list, varlist, body, false); });
1194COMMANDF(looplisti, "sss", (char *list, char *varlist, char *body) { looplist(list, varlist, body, true); });
1195

Callers 1

command.cppFile · 0.85

Calls 12

explodelistFunction · 0.85
newstringFunction · 0.85
newidentFunction · 0.85
pushidentFunction · 0.85
cslimiterrFunction · 0.85
executeFunction · 0.85
popidentFunction · 0.85
loopvFunction · 0.70
conoutfFunction · 0.70
loopjFunction · 0.70
lengthMethod · 0.45
addMethod · 0.45

Tested by

no test coverage detected