| 855 | // SERIALIZATION |
| 856 | |
| 857 | IdfObject_ImplPtr WorkspaceObject_Impl::idfObjectImplPtr() { |
| 858 | if (!initialized()) { |
| 859 | LOG_AND_THROW("Attempt to write a disconnected WorkspaceObject out to Idf."); |
| 860 | } |
| 861 | |
| 862 | // construct new IdfObject from WorkspaceObject's data |
| 863 | IdfObject_ImplPtr result(new IdfObject_Impl(m_handle, m_comment, m_iddObject, m_fields, m_fieldComments)); |
| 864 | // add name references based on WorkspaceObject's pointer data |
| 865 | if (m_sourceData) { |
| 866 | bool serializeHandle = m_iddObject.hasHandleField(); |
| 867 | for (const ForwardPointer& ptr : m_sourceData->pointers) { |
| 868 | if (!ptr.targetHandle.isNull()) { |
| 869 | if (serializeHandle) { |
| 870 | result->setString(ptr.fieldIndex, toString(ptr.targetHandle)); |
| 871 | } else { |
| 872 | OptionalString targetName = m_workspace->name(ptr.targetHandle); |
| 873 | OS_ASSERT(targetName); |
| 874 | if (targetName->empty()) { |
| 875 | // give target a name |
| 876 | OptionalWorkspaceObject target = m_workspace->getObject(ptr.targetHandle); |
| 877 | OS_ASSERT(target); |
| 878 | target->createName(false); |
| 879 | targetName = target->name(); |
| 880 | OS_ASSERT(targetName); |
| 881 | } |
| 882 | result->setString(ptr.fieldIndex, *targetName); |
| 883 | } |
| 884 | } |
| 885 | } |
| 886 | } |
| 887 | return result; |
| 888 | } |
| 889 | |
| 890 | IdfObject_ImplPtr WorkspaceObject_Impl::idfObjectImplPtr() const { |
| 891 | if (!initialized()) { |
no test coverage detected