Branch data Line data Source code
1 : : //-------------------------------------------------------------------------
2 : : // Filename : FacetAttribSet.cpp
3 : : //
4 : : // Purpose : Common attribute functionality for MBG
5 : : //
6 : : // Special Notes :
7 : : //
8 : : // Creator : Jason Kraftcheck
9 : : //
10 : : // Creation Date : 03/01/03
11 : : //-------------------------------------------------------------------------
12 : :
13 : : #include "FacetAttribSet.hpp"
14 : : #include "FacetAttrib.hpp"
15 : : #include "CubitSimpleAttrib.hpp"
16 : : #include "CubitFileIOWrapper.hpp"
17 : :
18 : 1606 : void FacetAttribSet::append_attribute( const CubitSimpleAttrib& csa )
19 : : {
20 [ + - ]: 1606 : FacetAttrib* new_attrib = new FacetAttrib(csa);
21 : 1606 : new_attrib->listNext = listHead;
22 : 1606 : listHead = new_attrib;
23 : 1606 : }
24 : :
25 : 10780 : void FacetAttribSet::remove_attribute( const CubitSimpleAttrib& csa )
26 : : {
27 [ + + ]: 10780 : if( !listHead )
28 : 8877 : return;
29 : :
30 : 1903 : FacetAttrib* attrib = 0;
31 [ + + ]: 1903 : if ( listHead->equals(csa) )
32 : : {
33 : 726 : attrib = listHead;
34 : 726 : listHead = listHead->listNext;
35 [ + - ]: 726 : delete attrib;
36 : 726 : return;
37 : : }
38 : :
39 [ + + ]: 2266 : for ( FacetAttrib* prev = listHead; prev->listNext; prev = prev->listNext )
40 : : {
41 [ + + ]: 1969 : if( prev->listNext->equals(csa) )
42 : : {
43 : 880 : attrib = prev->listNext;
44 : 880 : prev->listNext = attrib->listNext;
45 [ + - ]: 880 : delete attrib;
46 : 880 : return;
47 : : }
48 : : }
49 : : }
50 : :
51 : 3652 : void FacetAttribSet::remove_all_attributes()
52 : : {
53 [ + + ]: 4664 : while( listHead )
54 : : {
55 : 1012 : FacetAttrib* dead = listHead;
56 : 1012 : listHead = dead->listNext;
57 [ + - ]: 1012 : delete dead;
58 : : }
59 : 3652 : }
60 : :
61 : 2024 : CubitStatus FacetAttribSet::get_attributes( DLIList<CubitSimpleAttrib>& list ) const
62 : : {
63 [ + + ]: 2739 : for( FacetAttrib* attrib = listHead; attrib; attrib = attrib->listNext )
64 [ + - ]: 715 : list.append( attrib->get_CSA() );
65 : 2024 : return CUBIT_SUCCESS;
66 : : }
67 : :
68 : 10648 : CubitStatus FacetAttribSet::get_attributes( const CubitString& name,
69 : : DLIList<CubitSimpleAttrib>& list ) const
70 : : {
71 [ + + ]: 26774 : for( FacetAttrib* attrib = listHead; attrib; attrib = attrib->listNext )
72 [ + - ][ + + ]: 16126 : if( attrib->name() == name )
73 [ + - ]: 792 : list.append( attrib->get_CSA() );
74 : 10648 : return CUBIT_SUCCESS;
75 : : }
76 : :
77 : 1199 : CubitStatus FacetAttribSet::save_attributes( FILE* file_ptr ) const
78 : : {
79 : : FacetAttrib *curr_attrib;
80 : 1199 : CubitStatus status = CUBIT_SUCCESS;
81 : :
82 : : //save # attribs
83 [ + - ]: 1199 : unsigned int size = attribute_count();
84 [ + - ]: 1199 : NCubitFile::CIOWrapper wrapper( file_ptr );
85 [ + - ]: 1199 : wrapper.Write( &size, 1 );
86 : :
87 : : //save each attrib
88 [ + + ]: 2211 : for( curr_attrib = listHead; curr_attrib; curr_attrib = curr_attrib->listNext )
89 [ + - ][ - + ]: 1012 : if( !curr_attrib->save(file_ptr) )
90 : 0 : status = CUBIT_FAILURE;
91 : :
92 [ + - ]: 1199 : return status;
93 : : }
94 : :
95 : 616 : CubitStatus FacetAttribSet::restore_attributes( FILE* file_ptr, unsigned endian )
96 : : {
97 : : FacetAttrib *curr_attrib;
98 : :
99 : : //Read # attribs
100 : : unsigned int size;
101 [ + - ]: 616 : NCubitFile::CIOWrapper wrapper( endian, file_ptr );
102 [ + - ]: 616 : wrapper.Read( &size, 1 );
103 : :
104 [ + + ]: 1628 : for (unsigned i = 0; i < size; i++)
105 : : {
106 [ + - ]: 1012 : curr_attrib = FacetAttrib::restore( file_ptr, endian);
107 [ - + ]: 1012 : if (!curr_attrib)
108 : : {
109 : : // file corrupt? don't try to read any more
110 : 0 : return CUBIT_FAILURE;
111 : : }
112 : :
113 : 1012 : curr_attrib->listNext = listHead;
114 : 1012 : listHead = curr_attrib;
115 : : }
116 : :
117 [ + - ]: 616 : return CUBIT_SUCCESS;
118 : : }
119 : :
120 : :
121 : 1199 : int FacetAttribSet::attribute_count() const
122 : : {
123 : 1199 : int count = 0;
124 [ + + ]: 2211 : for( FacetAttrib* attrib = listHead; attrib; attrib = attrib->listNext )
125 : 1012 : count++;
126 : 1199 : return count;
127 : : }
128 : :
|