Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
	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;
				}
			}
		}
	}
Exemplo n.º 3
0
int main( int argc, char *argv[] ) {
	int value;
	fscanf( stdin, "%d", &value );
	sumValue( value );
	return 0;
}