bool CVmRunEvn::CheckAppAcctOperate(CTransaction* tx) { int64_t addValue(0), minusValue(0), sumValue(0); for(auto vOpItem : MapAppOperate) { for(auto appFund : vOpItem.second) { if(ADD_FREE_OP == appFund.opeatortype || ADD_TAG_OP == appFund.opeatortype) { int64_t temp = appFund.mMoney; temp += addValue; if(temp < addValue || temp<appFund.mMoney) { return false; } addValue = temp; } else if(SUB_FREE_OP == appFund.opeatortype || SUB_TAG_OP == appFund.opeatortype) { int64_t temp = appFund.mMoney; temp += minusValue; if(temp < minusValue || temp<appFund.mMoney) { return false; } minusValue = temp; } } } sumValue = addValue - minusValue; if(sumValue > addValue) { return false; } int64_t sysContractAcct(0); for(auto item : m_output) { vector_unsigned_char vAccountId = GetAccountID(item); if(vAccountId == boost::get<CRegID>(tx->desUserId).GetVec6() && item.opeatortype == MINUS_FREE) { uint64_t value; memcpy(&value, item.money, sizeof(item.money)); int64_t temp = value; if(temp < 0) { return false; } temp += sysContractAcct; if(temp < sysContractAcct || temp < (int64_t)value) return false; sysContractAcct = temp; } } int64_t sysAcctSum = tx->llValues - sysContractAcct; if(sysAcctSum > (int64_t)tx->llValues) { return false; } if(sumValue != sysAcctSum){ LogPrint("vm", "CheckAppAcctOperate:addValue=%lld, minusValue=%lld, txValue=%lld, sysContractAcct=%lld sumValue=%lld, sysAcctSum=%lld\n", addValue, minusValue, tx->llValues, sysContractAcct,sumValue, sysAcctSum); return false; } return true; }
void downSample(VolumeDataSource *ori, GridData &s) { int channels = ori->getChannels(); Vector3i originRes = ori->getResolution(); Vector3i res; res.x = originRes.x / scale.x; res.y = originRes.y / scale.y; res.z = originRes.z / scale.z; initS(s, res); originRes.x -= originRes.x % scale.x; originRes.y -= originRes.y % scale.y; originRes.z -= originRes.z % scale.z; for (int i = 0; i < originRes.x; i += scale.x) { for (int j = 0; j < originRes.y; j += scale.y) { for (int k = 0; k < originRes.z; k += scale.z) { Vector sumValue(0.f); Float cnt = 0.f; for (int dx = 0; dx < scale.x; dx++) { for (int dy = 0; dy < scale.y; dy++) { for (int dz = 0; dz < scale.z; dz++) { if (channels == 1) { float v = ori->lookupFloat(i + dx, j + dy, k + dz, 0); sumValue += Vector(v); cnt += 1.f; } else { Vector v(ori->lookupFloat(i + dx, j + dy, k + dz, 0), ori->lookupFloat(i + dx, j + dy, k + dz, 1), ori->lookupFloat(i + dx, j + dy, k + dz, 2)); sumValue += v; cnt += 1.f; } } } } s[i / scale.x][j / scale.y][k / scale.z] = sumValue / cnt; } } } }
int main( int argc, char *argv[] ) { int value; fscanf( stdin, "%d", &value ); sumValue( value ); return 0; }