From 414ef9c1383f25a86d30474794105924ec6490ce Mon Sep 17 00:00:00 2001
From: Christophe Geuzaine <cgeuzaine@ulg.ac.be>
Date: Tue, 28 Dec 2004 06:03:48 +0000
Subject: [PATCH] add missing combine_strings in combine_space (still need to
 implement the string combination in combine_time)

---
 Common/Views.cpp | 60 ++++++++++++++++++++++++++++++++++++++++++------
 1 file changed, 53 insertions(+), 7 deletions(-)

diff --git a/Common/Views.cpp b/Common/Views.cpp
index cf23fa21a6..3ce10f2be3 100644
--- a/Common/Views.cpp
+++ b/Common/Views.cpp
@@ -1,4 +1,4 @@
-// $Id: Views.cpp,v 1.154 2004-12-27 21:05:06 geuzaine Exp $
+// $Id: Views.cpp,v 1.155 2004-12-28 06:03:48 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -1300,6 +1300,45 @@ static void combine(List_T * a, List_T * b)
   }
 }
 
+static void combine_strings(Post_View *a, Post_View *b)
+{
+  double d, beg, end;
+  char *c;
+  for(int i = 0; i < List_Nbr(a->T2D); i+=4){
+    List_Add(b->T2D, List_Pointer(a->T2D, i));
+    List_Add(b->T2D, List_Pointer(a->T2D, i+1));
+    List_Add(b->T2D, List_Pointer(a->T2D, i+2)); 
+    d = List_Nbr(b->T2C);
+    List_Add(b->T2D, &d);
+    List_Read(a->T2D, i+3, &beg); 
+    c = (char*)List_Pointer(a->T2C, (int)beg);
+    if(i > List_Nbr(a->T2D) - 8)
+      end = (double)List_Nbr(a->T2C);
+    else
+      List_Read(a->T2D, i+3+4, &end); 
+    for(int j = 0; j < (int)(end-beg); j++)
+      List_Add(b->T2C, &c[j]); 
+    b->NbT2++;
+  }
+  for(int i = 0; i < List_Nbr(a->T3D); i+=5){
+    List_Add(b->T3D, List_Pointer(a->T3D, i));
+    List_Add(b->T3D, List_Pointer(a->T3D, i+1));
+    List_Add(b->T3D, List_Pointer(a->T3D, i+2)); 
+    List_Add(b->T3D, List_Pointer(a->T3D, i+3)); 
+    d = List_Nbr(b->T3C);
+    List_Add(b->T3D, &d);
+    List_Read(a->T3D, i+4, &beg); 
+    c = (char*)List_Pointer(a->T3C, (int)beg);
+    if(i > List_Nbr(a->T3D) - 10)
+      end = (double)List_Nbr(a->T3C);
+    else
+      List_Read(a->T3D, i+4+5, &end); 
+    for(int j = 0; j < (int)(end-beg); j++)
+      List_Add(b->T3C, &c[j]); 
+    b->NbT3++;
+  }
+}
+
 static void combine_space(struct nameidx *id, List_T *to_remove)
 {
   int index;
@@ -1349,14 +1388,19 @@ static void combine_space(struct nameidx *id, List_T *to_remove)
     combine(v->SY,vm->SY); vm->NbSY += v->NbSY;
     combine(v->VY,vm->VY); vm->NbVY += v->NbVY;
     combine(v->TY,vm->TY); vm->NbTY += v->NbTY;
-    /* this more complicated: we have to recompute the indices
-       combine(v->T2D,vm->T2D);
-       combine(v->T2C,vm->T2C); v->NbT2 += vm->NbT2;
-       combine(v->T3D,vm->T3D);
-       combine(v->T3C,vm->T3C); v->NbT2 += vm->NbT2;
-    */
+    combine_strings(v,vm);
   }
 
+#if 0
+  // debug strings:
+  for(int i=0; i<List_Nbr(vm->T2D); i++)
+    printf("%g ", *(double*)List_Pointer(vm->T2D, i));
+  printf("\n");
+  for(int i=0; i<List_Nbr(vm->T2C); i++)
+    printf("%c ", *(char*)List_Pointer(vm->T2C, i));
+  printf("\n");
+#endif
+
   // finalize
   char name[256], filename[256], tmp[256];
   if(!strcmp(id->name, "__all__"))
@@ -1416,6 +1460,8 @@ static void combine_time(struct nameidx *id, List_T *to_remove)
     }
   }
 
+  // FIXME: still need to do the work for strings (T2 and T3)
+
   // create the time data
   for(int i = 0; i < List_Nbr(id->indices); i++){
     List_Read(id->indices, i, &index);
-- 
GitLab