Add STValue256 type.

This commit is contained in:
Arthur Britto
2012-05-26 02:51:10 -07:00
parent b33c22fad8
commit 0b9c762f99
2 changed files with 42 additions and 4 deletions

View File

@@ -33,6 +33,9 @@ std::auto_ptr<SerializedType> STObject::makeDefaultObject(SerializedTypeID id, c
case STI_HASH256:
return std::auto_ptr<SerializedType>(new STHash256(name));
case STI_VECTOR256:
return std::auto_ptr<SerializedType>(new STVector256(name));
case STI_VL:
return std::auto_ptr<SerializedType>(new STVariableLength(name));
@@ -79,6 +82,9 @@ std::auto_ptr<SerializedType> 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<const STVector256 *>(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<STVector256*>(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);

View File

@@ -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<unsigned char> getValueFieldVL(SOE_Field field) const;
std::vector<TaggedListItem> 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);