Add conversion from new to legacy symtab
authorPaul Bauer <paul.bauer.q@gmail.com>
Sun, 24 May 2020 19:13:28 +0000 (19:13 +0000)
committerMark Abraham <mark.j.abraham@gmail.com>
Sun, 24 May 2020 19:13:28 +0000 (19:13 +0000)
Added function to convert legacy to modern version as well.
Also add test for conversion and merge test fixtures for symbol table
tests.

Refs #2833

Change-Id: I59dab5e19a6fc4ab86933b178cb2d729b72c4f7a

src/gromacs/topology/symtab.cpp
src/gromacs/topology/symtab.h
src/gromacs/topology/tests/refdata/SymtabTest_AddLargeNumberOfEntries.xml [deleted file]
src/gromacs/topology/tests/refdata/SymtabTest_NoDuplicatesInLargeTable.xml [deleted file]
src/gromacs/topology/tests/symtab.cpp
src/gromacs/topology/topology.h

index ea075e411b4696ab90d318a034981bc5a446680d..d7432ebfaf001eb09be2c4a6fc05f1e0b9fdac3d 100644 (file)
@@ -163,6 +163,14 @@ StringTableEntry readStringTableEntry(gmx::ISerializer* serializer, const String
     return table.at(entry);
 }
 
+void StringTable::copyToLegacySymtab(struct t_symtab* symtab) const
+{
+    for (const auto& entry : table_)
+    {
+        put_symtab(symtab, entry.c_str());
+    }
+}
+
 // Old code for legacy data structure starts below.
 //! Maximum size of character string in table.
 constexpr int c_trimSize = 1024;
index b75b32d0c9cb8e3b6b9e60e9ca57a9132f4a091c..826fb86eb37284d5d9eb773279ee3048c140e427 100644 (file)
@@ -114,6 +114,15 @@ public:
     //! Print human readable format of storage.
     void printStringTableStorageToFile(FILE* fp, int indent, const char* title) const;
 
+    /*! \brief
+     * Copy data in new datastructure to legacy version.
+     *
+     * The legacy datastructures need to be already initialized.
+     *
+     * \param[in] symtab Legacy symbol table to add entries to.
+     */
+    void copyToLegacySymtab(struct t_symtab* symtab) const;
+
     friend class StringTableBuilder;
 
 private:
diff --git a/src/gromacs/topology/tests/refdata/SymtabTest_AddLargeNumberOfEntries.xml b/src/gromacs/topology/tests/refdata/SymtabTest_AddLargeNumberOfEntries.xml
deleted file mode 100644 (file)
index 9ad22db..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0"?>
-<?xml-stylesheet type="text/xsl" href="referencedata.xsl"?>
-<ReferenceData>
-  <Sequence Name="Complete dump of SymbolTable">
-    <Int Name="Length">8</Int>
-    <String>Symtab[0]="0"</String>
-    <String>Symtab[1]="1"</String>
-    <String>Symtab[2]="2"</String>
-    <String>Symtab[3]="3"</String>
-    <String>Symtab[4]="4"</String>
-    <String>Symtab[5]="5"</String>
-    <String>Symtab[6]="6"</String>
-    <String>Symtab[7]="foobar"</String>
-  </Sequence>
-</ReferenceData>
diff --git a/src/gromacs/topology/tests/refdata/SymtabTest_NoDuplicatesInLargeTable.xml b/src/gromacs/topology/tests/refdata/SymtabTest_NoDuplicatesInLargeTable.xml
deleted file mode 100644 (file)
index b57efc4..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0"?>
-<?xml-stylesheet type="text/xsl" href="referencedata.xsl"?>
-<ReferenceData>
-  <Sequence Name="Complete dump of SymbolTable">
-    <Int Name="Length">15</Int>
-    <String>Symtab[0]="0"</String>
-    <String>Symtab[1]="1"</String>
-    <String>Symtab[2]="2"</String>
-    <String>Symtab[3]="3"</String>
-    <String>Symtab[4]="4"</String>
-    <String>Symtab[5]="5"</String>
-    <String>Symtab[6]="6"</String>
-    <String>Symtab[7]="baz"</String>
-    <String>Symtab[8]="7"</String>
-    <String>Symtab[9]="8"</String>
-    <String>Symtab[10]="9"</String>
-    <String>Symtab[11]="10"</String>
-    <String>Symtab[12]="11"</String>
-    <String>Symtab[13]="12"</String>
-    <String>Symtab[14]="13"</String>
-  </Sequence>
-</ReferenceData>
index f52e058f33be25169372775c8400bfb7bbbe9f2b..f9a0d67d0ef377c1457248bc3397de159215bd05 100644 (file)
@@ -34,7 +34,7 @@
  */
 /*! \internal \file
  * \brief
- * Tests for legacy symbol table
+ * Tests for legacy symbol table and replacement.
  *
  * \author Paul Bauer <paul.bauer.q@gmail.com>
  */
@@ -320,6 +320,7 @@ TEST_F(StringTableTest, NoDuplicatesInLargeTable)
     checkTable(table);
 }
 
+
 TEST_F(StringTableTest, CanWriteToBuffer)
 {
     builder().addString("foo");
@@ -385,6 +386,22 @@ TEST_F(StringTableTest, RoundtripWithCorrectStringIndices)
     EXPECT_EQ(*(finalTable.at(2)), *(deserializedEntries[2]));
 }
 
+TEST_F(StringTableTest, CanCopyToLegacyTable)
+{
+    auto fooSymbol = builder().addString("foo");
+    auto barSymbol = builder().addString("Bar");
+
+    StringTable finalTable = builder().build();
+
+    t_symtab legacySymtab;
+    open_symtab(&legacySymtab);
+    finalTable.copyToLegacySymtab(&legacySymtab);
+    int fooEntryIndex = readIndexFromSerializer(fooSymbol);
+    int barEntryIndex = readIndexFromSerializer(barSymbol);
+    EXPECT_STREQ(finalTable.at(fooEntryIndex)->c_str(), *get_symtab_handle(&legacySymtab, fooEntryIndex));
+    EXPECT_STREQ(finalTable.at(barEntryIndex)->c_str(), *get_symtab_handle(&legacySymtab, barEntryIndex));
+    done_symtab(&legacySymtab);
+}
 
 namespace
 {
index b541c5ec24e8e49f22d1925f8a9b26b8436934a2..a3fe344f77b20e8d0c76de4aef9d053b92e8d0e5 100644 (file)
@@ -185,7 +185,7 @@ struct gmx_mtop_t //NOLINT(clang-analyzer-optin.performance.Padding)
     t_atomtypes atomtypes;
     //! Groups of atoms for different purposes
     SimulationGroups groups;
-    //! The symbol table
+    //! The legacy symbol table
     t_symtab symtab;
     //! Tells whether we have valid molecule indices
     bool haveMoleculeIndices = false;