From 003ec1af1ee2706c7bb69a7cb12340b1eda06ec9 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Sun, 22 Apr 2012 18:47:59 -0700 Subject: [PATCH] Missing helper functions. --- src/SerializedLedger.h | 2 ++ src/SerializedObject.cpp | 16 ++++++++++++++++ src/SerializedObject.h | 1 + 3 files changed, 19 insertions(+) diff --git a/src/SerializedLedger.h b/src/SerializedLedger.h index 3634c74881..af462de6b5 100644 --- a/src/SerializedLedger.h +++ b/src/SerializedLedger.h @@ -60,6 +60,8 @@ public: { return mObject.setValueFieldVL(field, v); } void setIFieldTL(SOE_Field field, const std::vector& v) { return mObject.setValueFieldTL(field, v); } + void setIFieldAccount(SOE_Field field, const uint160& account) + { return mObject.setValueFieldAccount(field, account); } bool getIFieldPresent(SOE_Field field) const { return mObject.isFieldPresent(field); } void makeIFieldPresent(SOE_Field field) { return mObject.makeFieldPresent(field); } diff --git a/src/SerializedObject.cpp b/src/SerializedObject.cpp index 7498cdf46d..18117d29a2 100644 --- a/src/SerializedObject.cpp +++ b/src/SerializedObject.cpp @@ -452,6 +452,22 @@ void STObject::setValueFieldH160(SOE_Field field, const uint160& v) cf->setValue(v); } +void STObject::setValueFieldAccount(SOE_Field field, const uint160& v) +{ + SerializedType* rf = getPField(field); + if (!rf) throw std::runtime_error("Field not found"); + SerializedTypeID id = rf->getSType(); + if (id == STI_OBJECT) + { + makeFieldPresent(field); + rf = getPField(field); + id = rf->getSType(); + } + STAccount* cf = dynamic_cast(rf); + if (!cf) throw std::runtime_error("Wrong field type"); + cf->setValueH160(v); +} + void STObject::setValueFieldVL(SOE_Field field, const std::vector& v) { SerializedType* rf = getPField(field); diff --git a/src/SerializedObject.h b/src/SerializedObject.h index 06bd3bcd29..ce2bbb9f8b 100644 --- a/src/SerializedObject.h +++ b/src/SerializedObject.h @@ -113,6 +113,7 @@ public: void setValueFieldH256(SOE_Field field, const uint256&); void setValueFieldVL(SOE_Field field, const std::vector&); void setValueFieldTL(SOE_Field field, const std::vector&); + void setValueFieldAccount(SOE_Field field, const uint160&); bool isFieldPresent(SOE_Field field) const; void makeFieldPresent(SOE_Field field);