Exemple #1
0
bool VarValue::operator==(const VarValue& v) const {
	if (type() != v.type())
		return false;
	switch (type()) {
	case VarType::Null: return true;
	case VarType::Bool: return ToBool() == v.ToBool();
	case VarType::Int: return ToInt64() == v.ToInt64();
	case VarType::Float: return ToDouble() == v.ToDouble();
	case VarType::String: return ToString() == v.ToString();
	case VarType::Array:
		if (size() != v.size())
			return false;
		for (int i=0; i<size(); ++i)
			if (_self[i] != v[i])
				return false;
		return true;
	case VarType::Map:
		{
			if (size() != v.size())
				return false;
			vector<String> keys = Keys();
			for (int i=0; i<keys.size(); ++i) {
				const String& key = keys[i];
				if (!v.HasKey(key) || _self[key] != v[key])
					return false;
			}
			return true;
		}
	default:
		Throw(E_NOTIMPL);
	}
}
Exemple #2
0
TxInfo ToTxInfo(const VarValue& v) {
	TxInfo r;
	if (VarValue vAddress = v["address"])
		r.Address = vAddress.ToString();
	r.HashTx = HashValue(v["txid"].ToString());
	r.Confirmations = int32_t(v["confirmations"].ToInt64());
	r.Timestamp = DateTime::from_time_t(v["time"].ToInt64());
	if (r.Confirmations) {
		r.HashBlock = HashValue(v["blockhash"].ToString());
	}
	r.Amount = AmountToDecimal(v["amount"]);
	r.Generated = v.HasKey("generated") && v["generated"].ToBool();
	if (VarValue vDetails = v["details"]) {
		for (size_t i=0; i<vDetails.size(); ++i) {
			VarValue vd = vDetails[i];
			TxInfo::TxDetails d;
			d.Account = vd["account"].ToString();
			d.Address = vd["address"].ToString();
			d.IsSend = vd["category"].ToString() == "send";
			d.Amount = AmountToDecimal(vd["amount"]);
			r.Details.push_back(d);
		}
	}
	return r;
}