bool Sector::_handleRequestExceptCommandListener(Request* req,Sector* except) { bool suc = true; if (getManager()==NULL||getManager()->handleRequest(req)) { Command* cmd = new Command(req->getType(),req->getData()); if(!_sendCommandExcept(cmd,except)){ suc=false; } cmd->release(); } if (getManager()==NULL||getManager()->reportToSuperior(req)) { if (getSuperior()!=NULL) { if(!getSuperior()->_handleRequestExceptCommandListener(req,this)){ suc=false; } } } return suc; }
char *modulo(const char *n1, const char *n2) { int size1, size2, sup; char *tmp, *tmp2, *multi; if (!n1 || !n2) return 0; if (!strcmp(n2, "0")) { return strdup("null"); } if (!strcmp(n2, "1")) { return strdup("0"); } size1 = strlen(n1); size2 = strlen(n2); if (size1 < size2) { return strdup(n1); } if (!strcmp(n1, n2)) { return strdup("0"); } tmp = strdup(n1); while (strcmp(tmp, "0") && isBigger2(tmp, n2, size1, size2)) { sup = getSuperior(size1, size2, tmp, n2); multi = getDivider(sup, tmp, n2); tmp2 = mult(multi, n2); free(multi); multi = getSubstractNumber(tmp, tmp2); free(tmp2); tmp2 = multi; multi = substract(tmp, tmp2); free(tmp); free(tmp2); tmp = multi; size1 = strlen(tmp); if (!strcmp(tmp, n2)) { free(tmp); return strdup("0"); } } return tmp; }
char *divide(const char *n1, const char *n2) { int size1, size2, pos = 0, sup, x, tmp_size, old_size; char *ret, *tmp, *tmp2, *multi; if (!n1 || !n2) return 0; if (!strcmp(n2, "0")) { return strdup("null"); } if (!strcmp(n2, "1")) { return strdup(n1); } size1 = strlen(n1); size2 = strlen(n2); if (size1 < size2) { return strdup("0"); } if (!strcmp(n1, n2)) { return strdup("1"); } ret = malloc(sizeof(*ret) * (size1 + 2)); memset(ret, 0, size1 + 2 * sizeof(*ret)); tmp = strdup(n1); while (strcmp(tmp, "0") && isBigger2(tmp, n2, size1, size2)) { sup = getSuperior(size1, size2, tmp, n2); multi = getDivider(sup, tmp, n2); x = 0; while (multi[x]) ret[pos++] = multi[x++]; tmp2 = mult(multi, n2); tmp_size = strlen(tmp2) - 1; free(multi); multi = getSubstractNumber(tmp, tmp2); free(tmp2); tmp2 = multi; multi = substract(tmp, tmp2); sup = strlen(multi); old_size = size1; x = 0; while (x++ < old_size - sup - size2 - tmp_size) { ret[pos++] = '0'; } free(tmp); free(tmp2); tmp = multi; size1 = strlen(tmp); } free(tmp); tmp = mult(ret, n2); sup = strlen(n1) - strlen(tmp); while (sup-- > 0) ret[pos++] = '0'; free(tmp); --pos; while (pos >= 0) { if (ret[pos] > '9') { if (!pos) { memcpy(ret + 1, ret, size1 + 1); ret[0] = '0'; pos += 1; } ret[pos - 1] += 1; ret[pos] -= 10; } --pos; } if (!ret[0]) ret[0] = '0'; return ret; }