diff --git a/src/SerializedObject.cpp b/src/SerializedObject.cpp index 672c17fd4f..bf1a873f05 100644 --- a/src/SerializedObject.cpp +++ b/src/SerializedObject.cpp @@ -33,6 +33,9 @@ std::auto_ptr STObject::makeDefaultObject(SerializedTypeID id, c case STI_HASH256: return std::auto_ptr(new STHash256(name)); + case STI_VECTOR256: + return std::auto_ptr(new STVector256(name)); + case STI_VL: return std::auto_ptr(new STVariableLength(name)); @@ -79,6 +82,9 @@ std::auto_ptr STObject::makeDeserializedObject(SerializedTypeID case STI_HASH256: return STHash256::deserialize(sit, name); + case STI_VECTOR256: + return STVector256::deserialize(sit, name); + case STI_VL: return STVariableLength::deserialize(sit, name); @@ -464,6 +470,17 @@ STAmount STObject::getValueFieldAmount(SOE_Field field) const return *cf; } +STVector256 STObject::getValueFieldV256(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 STVector256(); // optional field not present + const STVector256 *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); @@ -524,6 +541,16 @@ void STObject::setValueFieldH256(SOE_Field field, const uint256& v) cf->setValue(v); } +void STObject::setValueFieldV256(SOE_Field field, const STVector256& v) +{ + SerializedType* rf = getPField(field); + if (!rf) throw std::runtime_error("Field not found"); + if (rf->getSType() == STI_NOTPRESENT) rf = makeFieldPresent(field); + STVector256* cf = dynamic_cast(rf); + if (!cf) throw std::runtime_error("Wrong field type"); + cf->setValue(v); +} + void STObject::setValueFieldAccount(SOE_Field field, const uint160& v) { SerializedType* rf = getPField(field); diff --git a/src/SerializedObject.h b/src/SerializedObject.h index aacffc11f8..da778fe8e0 100644 --- a/src/SerializedObject.h +++ b/src/SerializedObject.h @@ -24,6 +24,9 @@ enum SOE_Field sfGeneric = 0, // common fields + sfAcceptExpire, + sfAcceptRate, + sfAcceptStart, sfAccount, sfAccountID, sfAmount, @@ -38,24 +41,31 @@ enum SOE_Field sfCurrency, sfCurrencyIn, sfCurrencyOut, - sfCurrentRate, sfDestination, sfEmailHash, sfExpireLedger, sfExtensions, + sfFirstNode, sfFlags, sfGenerator, sfGeneratorID, + sfHighID, + sfHighLimit, sfIdentifier, + sfIndexes, sfInvoiceID, + sfLastNode, sfLastReceive, sfLastTxn, sfLedgerHash, - sfLender, - sfLimit, sfLimitAmount, + sfLowID, + sfLowLimit, sfMessageKey, sfMinimumOffer, + sfNextAcceptExpire, + sfNextAcceptRate, + sfNextAcceptStart, sfNextTransitExpire, sfNextTransitRate, sfNextTransitStart, @@ -63,7 +73,6 @@ enum SOE_Field sfOfferCurrency, sfPaths, sfPubKey, - sfRateLock, sfSendMax, sfSequence, sfSignature, @@ -155,6 +164,7 @@ public: std::vector getValueFieldVL(SOE_Field field) const; std::vector getValueFieldTL(SOE_Field field) const; STAmount getValueFieldAmount(SOE_Field field) const; + STVector256 getValueFieldV256(SOE_Field field) const; void setValueFieldU8(SOE_Field field, unsigned char); void setValueFieldU16(SOE_Field field, uint16); @@ -169,6 +179,7 @@ public: { setValueFieldAccount(field, addr.getAccountID()); } void setValueFieldAmount(SOE_Field field, const STAmount&); void setValueFieldPathSet(SOE_Field field, const STPathSet&); + void setValueFieldV256(SOE_Field field, const STVector256& v); bool isFieldPresent(SOE_Field field) const; SerializedType* makeFieldPresent(SOE_Field field);