root/cgm/trunk/geom/virtual/CompositeAttrib.cpp

Revision 1040, 6.6 KB (checked in by tautges, 2 years ago)

Version 10.2 of cgm.

Line 
1//-------------------------------------------------------------------------
2// Filename      : CompositeAttrib.cpp
3//
4// Purpose       : Container for attribute data placed on composite geometry.
5//
6// Special Notes : This object is intended for internal use by CompositeGeom
7//                 exclusively.
8//
9// Creator       : Jason Kraftcheck
10//
11// Creation Date : 07/01/03
12//-------------------------------------------------------------------------
13
14#include "CompositeAttrib.hpp"
15#include "CubitString.hpp"
16#include "CubitSimpleAttrib.hpp"
17
18//-------------------------------------------------------------------------
19// Purpose       : Construct composite attribute object from CSA
20//
21// Special Notes :
22//
23// Creator       : Jason Kraftcheck
24//
25// Creation Date : 06/30/03
26//-------------------------------------------------------------------------
27CompositeAttrib::CompositeAttrib( CubitSimpleAttrib* attrib, CompositeAttrib* n ) 
28  : int_array(0), real_array(0), string_array(0), next(n)
29{
30  int_count = attrib->int_data_list()->size();
31  if (int_count) 
32  {
33    int_array = new int[int_count];
34    attrib->int_data_list()->reset();
35    for (int i = 0; i < int_count; i++)
36      int_array[i] = *attrib->int_data_list()->get_and_step();
37  }
38
39  real_count = attrib->double_data_list()->size();
40  if (real_count) 
41  {
42    real_array = new double[real_count];
43    attrib->double_data_list()->reset();
44    for (int i = 0; i < real_count; i++)
45      real_array[i] = *attrib->double_data_list()->get_and_step();
46  }
47
48  string_count = attrib->string_data_list()->size();
49  if (string_count) 
50  {
51    string_array = new CubitString[string_count];
52    attrib->string_data_list()->reset();
53    for (int i = 0; i < string_count; i++)
54      string_array[i] = *attrib->string_data_list()->get_and_step();
55  }
56} 
57 
58//-------------------------------------------------------------------------
59// Purpose       : Copy constructor
60//
61// Special Notes :
62//
63// Creator       : Jason Kraftcheck
64//
65// Creation Date : 06/30/03
66//-------------------------------------------------------------------------
67CompositeAttrib::CompositeAttrib( const CompositeAttrib& copy) 
68  : int_count(copy.int_count), int_array(0), 
69    real_count(copy.real_count), real_array(0),
70    string_count(copy.string_count), string_array(0), 
71    next(0)
72{
73  if (int_count)
74  {
75    int_array = new int[int_count];
76    memcpy(int_array, copy.int_array, int_count * sizeof(int));
77  }
78  if (real_count)
79  {
80    real_array = new double[real_count];
81    memcpy(real_array, copy.real_array, real_count * sizeof(double));
82  }
83  if (string_count)
84  {
85    string_array = new CubitString[string_count];
86    CubitString *read = copy.string_array;
87    CubitString *write = string_array;
88    CubitString* end = read + string_count;
89    while (read < end)
90      *(write++) = *(read++);
91  }
92}
93   
94//-------------------------------------------------------------------------
95// Purpose       : Populate attribute for saving
96//
97// Special Notes :
98//
99// Creator       : Jason Kraftcheck
100//
101// Creation Date : 06/30/03
102//-------------------------------------------------------------------------
103void CompositeAttrib::append_to_csa( CubitSimpleAttrib* attrib ) const
104{
105  append_to_lists(*attrib->string_data_list(),
106                  *attrib->int_data_list(),
107                  *attrib->double_data_list());
108}
109
110//-------------------------------------------------------------------------
111// Purpose       : Common functionality for append_to_csa() and csa()
112//
113// Special Notes :
114//
115// Creator       : Jason Kraftcheck
116//
117// Creation Date : 06/30/03
118//-------------------------------------------------------------------------
119void CompositeAttrib::append_to_lists( DLIList<CubitString*>& string_list,
120                                       DLIList<int*>& int_list,
121                                       DLIList<double*>& real_list ) const
122{
123  int* iitor = int_array;
124  int *const iend = int_array + int_count;
125  while( iitor < iend )
126    int_list.append(iitor++);
127 
128  double* ritor = real_array;
129  double *const rend = real_array + real_count;
130  while( ritor < rend )
131    real_list.append(ritor++);
132 
133  CubitString* sitor = string_array;
134  CubitString *const send = string_array + string_count;
135  while( sitor < send )
136    string_list.append(sitor++);
137}
138 
139//-------------------------------------------------------------------------
140// Purpose       : Copy data into CSA for return to higher level
141//
142// Special Notes :
143//
144// Creator       : Jason Kraftcheck
145//
146// Creation Date : 06/30/03
147//-------------------------------------------------------------------------
148CubitSimpleAttrib* CompositeAttrib::csa() const
149{
150  DLIList<CubitString*> string_list(string_count);
151  DLIList<int*> int_list(int_count);
152  DLIList<double*> real_list(real_count);
153  append_to_lists( string_list, int_list, real_list );
154  CubitSimpleAttrib* result = new CubitSimpleAttrib;
155  result->initialize_from_lists_of_ptrs( &string_list,
156                                real_count ? &real_list : 0, 
157                                int_count ? &int_list : 0 );
158  return result;
159}
160
161
162//-------------------------------------------------------------------------
163// Purpose       : CompositeAttrib destructor
164//
165// Special Notes :
166//
167// Creator       : Jason Kraftcheck
168//
169// Creation Date : 06/30/03
170//-------------------------------------------------------------------------
171CompositeAttrib::~CompositeAttrib()
172{
173  delete [] int_array;
174  delete [] real_array;
175  delete [] string_array;
176}
177
178//-------------------------------------------------------------------------
179// Purpose       : Compare to a csa
180//
181// Special Notes :
182//
183// Creator       : Jason Kraftcheck
184//
185// Creation Date : 06/30/03
186//-------------------------------------------------------------------------
187bool CompositeAttrib::equals( CubitSimpleAttrib* attrib ) const
188{
189  if (attrib->string_data_list()->size() != string_count ||
190      attrib->int_data_list()->size() != int_count ||
191      attrib->double_data_list()->size() != real_count)
192    return false;
193 
194  int i;
195  CubitString* s_itor = string_array;
196  attrib->string_data_list()->reset();
197  for (i = 0; i < attrib->string_data_list()->size(); i++)
198    if (*(attrib->string_data_list()->next(i)) != *(s_itor++))
199      return false;
200 
201  int *i_itor = int_array;
202  attrib->int_data_list()->reset();
203  for (i = 0; i < attrib->int_data_list()->size(); i++)
204    if (*(attrib->int_data_list()->next(i)) != *(i_itor++))
205      return false;
206 
207  double *r_itor = real_array;
208  attrib->double_data_list()->reset();
209  for (i = 0; i < attrib->double_data_list()->size(); i++)
210    if (*(attrib->double_data_list()->next(i)) != *(r_itor++))
211      return false;
212 
213  return true;
214}
Note: See TracBrowser for help on using the browser.