Some additional helper functions.

This commit is contained in:
JoelKatz
2012-10-16 13:07:22 -07:00
parent 2de864d23b
commit 7e29b4fae7
2 changed files with 16 additions and 0 deletions

View File

@@ -396,6 +396,19 @@ bool STObject::isFieldPresent(SField::ref field) const
return peekAtIndex(index).getSType() != STI_NOTPRESENT;
}
STObject& STObject::peekFieldObject(SField::ref field)
{
SerializedType* rf = getPField(field, true);
if (!rf)
throw std::runtime_error("Field not found");
if (rf->getSType() == STI_NOTPRESENT)
rf = makeFieldPresent(field);
STObject* cf = dynamic_cast<STObject*>(rf);
if (!cf)
throw std::runtime_error("Wrong field type");
return *cf;
}
bool STObject::setFlag(uint32 f)
{
STUInt32* t = dynamic_cast<STUInt32*>(getPField(sfFlags, true));

View File

@@ -132,6 +132,8 @@ public:
void setFieldPathSet(SField::ref field, const STPathSet&);
void setFieldV256(SField::ref field, const STVector256& v);
STObject& peekFieldObject(SField::ref field);
bool isFieldPresent(SField::ref field) const;
SerializedType* makeFieldPresent(SField::ref field);
void makeFieldAbsent(SField::ref field);
@@ -199,6 +201,7 @@ public:
void pop_back() { value.pop_back(); }
bool empty() const { return value.empty(); }
void clear() { value.clear(); }
void swap(STArray& a) { value.swap(a.value); }
virtual std::string getFullText() const;
virtual std::string getText() const;