From 163ecc60e32b916c35dbac81909fae1caff628bb Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 17 May 2012 20:26:52 -0700 Subject: [PATCH] STAmount helpers for STObject/STTransaction. --- src/SerializedObject.cpp | 21 +++++++++++++++++++++ src/SerializedObject.h | 2 ++ src/SerializedTransaction.h | 3 +++ 3 files changed, 26 insertions(+) diff --git a/src/SerializedObject.cpp b/src/SerializedObject.cpp index aef0f9cf7..c2cf3c267 100644 --- a/src/SerializedObject.cpp +++ b/src/SerializedObject.cpp @@ -429,6 +429,17 @@ std::vector STObject::getValueFieldTL(SOE_Field field) const return cf->getValue(); } +STAmount STObject::getValueFieldAmount(SOE_Field field) const +{ + const SerializedType* rf = peekAtPField(field); + if (!rf) throw std::runtime_error("Field not found"); + SerializedTypeID id = rf->getSType(); + if (id == STI_NOTPRESENT) return STAmount(); // optional field not present + const STAmount *cf = dynamic_cast(rf); + if (!cf) throw std::runtime_error("Wrong field type"); + return *cf; +} + void STObject::setValueFieldU8(SOE_Field field, unsigned char v) { SerializedType* rf = getPField(field); @@ -519,6 +530,16 @@ void STObject::setValueFieldTL(SOE_Field field, const std::vectorsetValue(v); } +void STObject::setValueFieldAmount(SOE_Field field, const STAmount &v) +{ + SerializedType* rf = getPField(field); + if (!rf) throw std::runtime_error("Field not found"); + if (rf->getSType() == STI_NOTPRESENT) rf = makeFieldPresent(field); + STAmount* cf = dynamic_cast(rf); + if (!cf) throw std::runtime_error("Wrong field type"); + (*cf) = v; +} + Json::Value STObject::getJson(int options) const { Json::Value ret(Json::objectValue); diff --git a/src/SerializedObject.h b/src/SerializedObject.h index 88e5d902f..9a2815171 100644 --- a/src/SerializedObject.h +++ b/src/SerializedObject.h @@ -145,6 +145,7 @@ public: NewcoinAddress getValueFieldAccount(SOE_Field field) const; std::vector getValueFieldVL(SOE_Field field) const; std::vector getValueFieldTL(SOE_Field field) const; + STAmount getValueFieldAmount(SOE_Field field) const; void setValueFieldU8(SOE_Field field, unsigned char); void setValueFieldU16(SOE_Field field, uint16); @@ -157,6 +158,7 @@ public: void setValueFieldAccount(SOE_Field field, const uint160&); void setValueFieldAccount(SOE_Field field, const NewcoinAddress& addr) { setValueFieldAccount(field, addr.getAccountID()); } + void setValueFieldAmount(SOE_Field field, const STAmount&); bool isFieldPresent(SOE_Field field) const; SerializedType* makeFieldPresent(SOE_Field field); diff --git a/src/SerializedTransaction.h b/src/SerializedTransaction.h index ff30e63e0..587387e73 100644 --- a/src/SerializedTransaction.h +++ b/src/SerializedTransaction.h @@ -84,6 +84,7 @@ public: uint256 getITFieldH256(SOE_Field field) const { return mInnerTxn.getValueFieldH256(field); } std::vector getITFieldVL(SOE_Field field) const { return mInnerTxn.getValueFieldVL(field); } std::vector getITFieldTL(SOE_Field field) const { return mInnerTxn.getValueFieldTL(field); } + STAmount getITFieldAmount(SOE_Field field) const { return mInnerTxn.getValueFieldAmount(field); } void setITFieldU8(SOE_Field field, unsigned char v) { return mInnerTxn.setValueFieldU8(field, v); } void setITFieldU16(SOE_Field field, uint16 v) { return mInnerTxn.setValueFieldU16(field, v); } void setITFieldU32(SOE_Field field, uint32 v) { return mInnerTxn.setValueFieldU32(field, v); } @@ -98,6 +99,8 @@ public: { return mInnerTxn.setValueFieldAccount(field, v); } void setITFieldAccount(SOE_Field field, const NewcoinAddress& v) { return mInnerTxn.setValueFieldAccount(field, v); } + void setITFieldAmount(SOE_Field field, const STAmount& v) + { return mInnerTxn.setValueFieldAmount(field, v); } // optional field functions bool getITFieldPresent(SOE_Field field) const;