SerializedType* STObject::getPField (SField::ref field, bool createOkay) { int index = getFieldIndex (field); if (index == -1) { if (createOkay && isFree ()) return getPIndex (giveObject (makeDefaultObject (field))); return NULL; } return getPIndex (index); }
STBase* STObject::getPField (SField const& field, bool createOkay) { int index = getFieldIndex (field); if (index == -1) { if (createOkay && isFree ()) return getPIndex(emplace_back(detail::defaultObject, field)); return nullptr; } return getPIndex (index); }
SerializedType* STObject::makeFieldPresent (SField::ref field) { int index = getFieldIndex (field); if (index == -1) { if (!isFree ()) throw std::runtime_error ("Field not found"); return getPIndex (giveObject (makeNonPresentObject (field))); } SerializedType* f = getPIndex (index); if (f->getSType () != STI_NOTPRESENT) return f; mData.replace (index, makeDefaultObject (f->getFName ()).release ()); return getPIndex (index); }
STBase* STObject::makeFieldPresent (SField const& field) { int index = getFieldIndex (field); if (index == -1) { if (!isFree ()) throw std::runtime_error ("Field not found"); return getPIndex (emplace_back(detail::nonPresentObject, field)); } STBase* f = getPIndex (index); if (f->getSType () != STI_NOTPRESENT) return f; v_[index] = detail::STVar( detail::defaultObject, f->getFName()); return getPIndex (index); }