Salome HOME
Update version to 3.2.0a1
[modules/kernel.git] / src / SALOMEDS / SALOMEDS_TableOfStringAttribute.cxx
index 827dbef5aa364de84e242dde2a007e8db794b7e9..9fe1812057917820dd0533c2c64c788e624e521a 100644 (file)
@@ -1,10 +1,12 @@
-using namespace std;
-//  File      : SALOMEDS_TableOfStringAttribute.cxx
-//  Created   : Mon Apr  7 10:13:30 2003
-//  Author    : Sergey Ruin
-//  Project   : SALOME
-//  Module    : SALOMEDS
-//  Copyright : Open CASCADE
+//  SALOME SALOMEDS : data structure of SALOME and sources of Salome data server 
+//
+//  Copyright (C) 2003  CEA/DEN, EDF R&D
+//
+//
+//
+//  File   : SALOMEDS_TableOfStringAttribute.cxx
+//  Author : Sergey Ruin
+//  Module : SALOME
 
 #include <SALOMEDS_TableOfStringAttribute.ixx>
 #include <Standard_Failure.hxx>
@@ -12,10 +14,11 @@ using namespace std;
 
 #include <string>
 #include <stdio.h>
+using namespace std;
 
 const Standard_GUID& SALOMEDS_TableOfStringAttribute::GetID() 
 {
-  static Standard_GUID SALOMEDS_TableOfStringAttributeID ("128371A2-8F52-11d6-A8A3-0001021E8C7F");
+  static Standard_GUID SALOMEDS_TableOfStringAttributeID ("128371A4-8F52-11d6-A8A3-0001021E8C7F");
   return SALOMEDS_TableOfStringAttributeID;
 }
 
@@ -228,11 +231,11 @@ void SALOMEDS_TableOfStringAttribute::Restore(const Handle(TDF_Attribute)& with)
   myNbColumns = aTable->myNbColumns;
   myTitle = aTable->myTitle;
   
-  for(anIndex = 1; anIndex <= aTable->GetNbRows();anIndex++) {
-    SetRowTitle(anIndex,aTable->GetRowTitle(anIndex));
-  }
+  for(anIndex = 1; anIndex <= aTable->GetNbRows();anIndex++)
+    myRows->Append(aTable->GetRowTitle(anIndex));
+
   for(anIndex = 1; anIndex <= aTable->GetNbColumns(); anIndex++) 
-    SetColumnTitle(anIndex, aTable->GetColumnTitle(anIndex));
+    myCols->Append(aTable->GetColumnTitle(anIndex));
 }
 
 Handle(TDF_Attribute) SALOMEDS_TableOfStringAttribute::NewEmpty() const
@@ -255,11 +258,10 @@ void SALOMEDS_TableOfStringAttribute::Paste(const Handle(TDF_Attribute)& into,
   aTable->myNbRows = myNbRows;
   aTable->myNbColumns = myNbColumns;
 
-  for(anIndex = 1; anIndex <= GetNbRows();anIndex++) {
-    aTable->SetRowTitle(anIndex,GetRowTitle(anIndex));
-  }
+  for(anIndex = 1; anIndex <= GetNbRows();anIndex++)
+    aTable->myRows->Append(GetRowTitle(anIndex));
   for(anIndex = 1; anIndex <= GetNbColumns(); anIndex++) 
-    aTable->SetColumnTitle(anIndex, GetColumnTitle(anIndex));
+    aTable->myCols->Append(GetColumnTitle(anIndex));
 }
 
 
@@ -293,7 +295,6 @@ Handle_TColStd_HSequenceOfInteger SALOMEDS_TableOfStringAttribute::GetSetColumnI
 void SALOMEDS_TableOfStringAttribute::ConvertToString(ostrstream& theStream)
 {
   int i, j, l;
-cout << "########## ConvertToString BEGIN " << endl;
   
   //Title
   l = myTitle.Length();
@@ -328,14 +329,16 @@ cout << "########## ConvertToString BEGIN " << endl;
   theStream << l << "\n";
   SALOMEDS_DataMapIteratorOfDataMapOfIntegerString anIterator(myTable);
   for(; anIterator.More(); anIterator.Next()) {
-    theStream << anIterator.Key() << "\n";
-    theStream << anIterator.Value() << "\n";
-//    l = anIterator.Value().Length();
-//    theStream << l << "\n";
-//    for(j=1; j<=l; j++)
-//      theStream << anIterator.Value().Value(j) << "\n";
+    if (anIterator.Value().Length()) { // check empty string in the value table
+      theStream << anIterator.Key() << "\n";
+      unsigned long aValueSize = anIterator.Value().Length();
+      theStream<<aValueSize << "\n";
+      theStream.write((TCollection_AsciiString(anIterator.Value()).ToCString()),aValueSize);
+      theStream<<"\n";
+    } else { // write index only of kind: "0key"; "05", for an example
+      theStream << "0" << anIterator.Key() << "\n";
+    }
   }
-cout << "########## ConvertToString END " << endl;  
   return;
 }
 
@@ -343,7 +346,12 @@ bool SALOMEDS_TableOfStringAttribute::RestoreFromString(istrstream& theStream)
 {
   Backup();
 
+  theStream.seekg(0, ios::end);
+  long aSize = theStream.tellg();
+  theStream.seekg(0, ios::beg);
+
   int i, j, l;
+  char *aValueString = new char[aSize];
 
   Standard_ExtCharacter anExtChar;
   TCollection_ExtendedString aStr;
@@ -391,19 +399,25 @@ bool SALOMEDS_TableOfStringAttribute::RestoreFromString(istrstream& theStream)
   TCollection_AsciiString aValue;
   theStream >> l;
   myTable.Clear();
+  theStream.getline(aValueString,aSize,'\n');
   for(i=1; i<=l; i++) {
     Standard_Integer aKey;
-    theStream >> aKey;
-    theStream >> aValue;
+
+    theStream.getline(aValueString,aSize,'\n');
+    aValue = aValueString;
+    aKey = aValue.IntegerValue();
+    if (aValue.Value(1) == '0')
+      aValue = "";
+    else {
+      unsigned long aValueSize;
+      theStream >> aValueSize;
+      theStream.read(aValueString, 1); // an '\n' omitting
+      theStream.read(aValueString, aValueSize);
+      theStream.read(aValueString, 1); // an '\n' omitting
+      aValue = aValueString;
+    }
     myTable.Bind(aKey, aValue);
-//    theStream >> l;
-//    aStr = TCollection_ExtendedString(l,0);
-//    for(j=1; j<=l; j++) {
-//      theStream >> anExtChar;
-//      aStr.SetValue(j, anExtChar);
-//    }
-//    myTable.Bind(aKey, aStr);
   }
-
+  delete(aValueString);
   return true;
 }