diff --git a/src/SerializedLedger.h b/src/SerializedLedger.h index 9e5ccc2475..0388e3c49d 100644 --- a/src/SerializedLedger.h +++ b/src/SerializedLedger.h @@ -53,6 +53,7 @@ public: uint16 getIFieldU16(SOE_Field field) const { return mObject.getValueFieldU16(field); } uint32 getIFieldU32(SOE_Field field) const { return mObject.getValueFieldU32(field); } uint64 getIFieldU64(SOE_Field field) const { return mObject.getValueFieldU64(field); } + uint128 getIFieldH128(SOE_Field field) const { return mObject.getValueFieldH128(field); } uint160 getIFieldH160(SOE_Field field) const { return mObject.getValueFieldH160(field); } uint256 getIFieldH256(SOE_Field field) const { return mObject.getValueFieldH256(field); } std::vector getIFieldVL(SOE_Field field) const { return mObject.getValueFieldVL(field); } @@ -65,6 +66,7 @@ public: void setIFieldU16(SOE_Field field, uint16 v) { return mObject.setValueFieldU16(field, v); } void setIFieldU32(SOE_Field field, uint32 v) { return mObject.setValueFieldU32(field, v); } void setIFieldU64(SOE_Field field, uint32 v) { return mObject.setValueFieldU64(field, v); } + void setIFieldH128(SOE_Field field, const uint128& v) { return mObject.setValueFieldH128(field, v); } void setIFieldH160(SOE_Field field, const uint160& v) { return mObject.setValueFieldH160(field, v); } void setIFieldH256(SOE_Field field, const uint256& v) { return mObject.setValueFieldH256(field, v); } void setIFieldVL(SOE_Field field, const std::vector& v) diff --git a/src/SerializedObject.cpp b/src/SerializedObject.cpp index e9c0564c5f..123781cbef 100644 --- a/src/SerializedObject.cpp +++ b/src/SerializedObject.cpp @@ -401,6 +401,17 @@ uint64 STObject::getValueFieldU64(SOE_Field field) const return cf->getValue(); } +uint128 STObject::getValueFieldH128(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 uint128(); // optional field not present + const STHash128 *cf = dynamic_cast(rf); + if (!cf) throw std::runtime_error("Wrong field type"); + return cf->getValue(); +} + uint160 STObject::getValueFieldH160(SOE_Field field) const { const SerializedType* rf = peekAtPField(field); @@ -525,6 +536,16 @@ void STObject::setValueFieldU64(SOE_Field field, uint64 v) cf->setValue(v); } +void STObject::setValueFieldH128(SOE_Field field, const uint128& v) +{ + SerializedType* rf = getPField(field); + if (!rf) throw std::runtime_error("Field not found"); + if (rf->getSType() == STI_NOTPRESENT) rf = makeFieldPresent(field); + STHash128* cf = dynamic_cast(rf); + if (!cf) throw std::runtime_error("Wrong field type"); + cf->setValue(v); +} + void STObject::setValueFieldH160(SOE_Field field, const uint160& v) { SerializedType* rf = getPField(field); diff --git a/src/SerializedObject.h b/src/SerializedObject.h index 5eb7245f4a..3c322486da 100644 --- a/src/SerializedObject.h +++ b/src/SerializedObject.h @@ -159,6 +159,7 @@ public: uint16 getValueFieldU16(SOE_Field field) const; uint32 getValueFieldU32(SOE_Field field) const; uint64 getValueFieldU64(SOE_Field field) const; + uint128 getValueFieldH128(SOE_Field field) const; uint160 getValueFieldH160(SOE_Field field) const; uint256 getValueFieldH256(SOE_Field field) const; NewcoinAddress getValueFieldAccount(SOE_Field field) const; @@ -171,6 +172,7 @@ public: void setValueFieldU16(SOE_Field field, uint16); void setValueFieldU32(SOE_Field field, uint32); void setValueFieldU64(SOE_Field field, uint64); + void setValueFieldH128(SOE_Field field, const uint128&); void setValueFieldH160(SOE_Field field, const uint160&); void setValueFieldH256(SOE_Field field, const uint256&); void setValueFieldVL(SOE_Field field, const std::vector&); diff --git a/src/SerializedTransaction.h b/src/SerializedTransaction.h index 13dede1d25..024bbfa548 100644 --- a/src/SerializedTransaction.h +++ b/src/SerializedTransaction.h @@ -75,16 +75,19 @@ public: uint16 getITFieldU16(SOE_Field field) const { return mInnerTxn.getValueFieldU16(field); } uint32 getITFieldU32(SOE_Field field) const { return mInnerTxn.getValueFieldU32(field); } uint64 getITFieldU64(SOE_Field field) const { return mInnerTxn.getValueFieldU64(field); } + uint128 getITFieldH128(SOE_Field field) const { return mInnerTxn.getValueFieldH128(field); } uint160 getITFieldH160(SOE_Field field) const { return mInnerTxn.getValueFieldH160(field); } uint160 getITFieldAccount(SOE_Field field) const; 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); } void setITFieldU64(SOE_Field field, uint32 v) { return mInnerTxn.setValueFieldU64(field, v); } + void setITFieldH128(SOE_Field field, const uint128& v) { return mInnerTxn.setValueFieldH128(field, v); } void setITFieldH160(SOE_Field field, const uint160& v) { return mInnerTxn.setValueFieldH160(field, v); } void setITFieldH256(SOE_Field field, const uint256& v) { return mInnerTxn.setValueFieldH256(field, v); } void setITFieldVL(SOE_Field field, const std::vector& v)