LCOV - code coverage report
Current view: top level - geom/facet - FacetAttrib.cpp (source / functions) Hit Total Coverage
Test: coverage_sk.info Lines: 72 81 88.9 %
Date: 2020-06-30 00:58:45 Functions: 7 7 100.0 %
Branches: 83 174 47.7 %

           Branch data     Line data    Source code
       1                 :            : #include "FacetAttrib.hpp"
       2                 :            : #include "CubitString.hpp"
       3                 :            : #include "CubitSimpleAttrib.hpp"
       4                 :            : #include "CubitFileIOWrapper.hpp"
       5                 :            : #include "CubitMessage.hpp"
       6                 :            : #include <algorithm>
       7                 :            : 
       8                 :            :   // Constructor - copy from CubitSimpleAttrib
       9                 :       1606 : FacetAttrib::FacetAttrib( const CubitSimpleAttrib& csa ) : listNext(0)
      10                 :            : {
      11                 :            :   int i;
      12                 :            : 
      13                 :            :     // save counts
      14                 :       1606 :   numStrings = csa.string_data_list().size();
      15                 :       1606 :   numDoubles = csa.double_data_list().size();
      16                 :       1606 :   numIntegers = csa.int_data_list().size();
      17                 :            : 
      18                 :            :     // allocate arrays, but don't try to allocate zero-length arrays
      19 [ +  - ][ +  - ]:       3212 :   stringArray = numStrings ? new CubitString[numStrings] : NULL;
         [ +  - ][ +  + ]
                 [ #  # ]
      20 [ -  + ][ #  # ]:       1606 :   doubleArray = numDoubles ? new double[numDoubles] : NULL;
      21 [ +  - ][ +  - ]:       1606 :   integerArray = numIntegers ? new int[numIntegers] : NULL;
      22                 :            : 
      23                 :            :     // copy data into arrays
      24         [ +  + ]:       3212 :   for( i = 0; i < numStrings; i++ )
      25                 :       1606 :     stringArray[i] = csa.string_data_list()[i];
      26         [ +  + ]:       6028 :   for( i = 0; i < numIntegers; i++ )
      27                 :       4422 :     integerArray[i] = csa.int_data_list()[i];
      28         [ -  + ]:       1606 :   for( i = 0; i < numDoubles; i++ )
      29                 :          0 :       doubleArray[i] = csa.double_data_list()[i];
      30         [ #  # ]:       1606 : }
      31                 :            : 
      32                 :            :   // Private constructor for use by restore(FILE*)
      33                 :       1012 : FacetAttrib::FacetAttrib( int string_count, CubitString strings[],
      34                 :            :                           int double_count, double doubles[],
      35                 :            :                           int int_count, int integers[] )
      36                 :            : : stringArray(strings), doubleArray(doubles), integerArray(integers),
      37                 :            :   numStrings(string_count),  numDoubles(double_count), numIntegers(int_count),
      38                 :       1012 :   listNext(0)
      39                 :       1012 : {}
      40                 :            : 
      41                 :            : 
      42                 :            :   // Destructor -- free arrays
      43                 :       2618 : FacetAttrib::~FacetAttrib()
      44                 :            : {
      45                 :            :     // "delete"ing NULL pointers is okay.
      46         [ +  - ]:       2618 :   delete [] integerArray;
      47         [ -  + ]:       2618 :   delete [] doubleArray;
      48 [ +  - ][ +  + ]:       5236 :   delete [] stringArray;
      49                 :       2618 : }
      50                 :            : 
      51                 :            :   // Copy this into a new CubitSimpleAttrib
      52                 :       1507 : CubitSimpleAttrib FacetAttrib::get_CSA() const
      53                 :            : {
      54                 :            :     // Set initial list size
      55 [ +  - ][ +  - ]:       1507 :   std::vector<CubitString> string_list(numStrings);
                 [ +  - ]
      56 [ +  - ][ +  - ]:       3014 :   std::vector<int> int_list(numIntegers);
      57 [ +  - ][ +  - ]:       3014 :   std::vector<double> double_list(numDoubles);
      58                 :            : 
      59                 :            :     // Don't need to 'new' objects in DLIList because
      60                 :            :     // CSA will make copies.  Just put addresses in list.
      61                 :            :   int i;
      62         [ +  + ]:       3014 :   for( i = 0; i < numStrings; i++ )
      63 [ +  - ][ +  - ]:       1507 :     string_list[i] = stringArray[i];
      64         [ +  + ]:       5929 :   for( i = 0; i < numIntegers; i++ )
      65         [ +  - ]:       4422 :     int_list[i] = integerArray[i];
      66         [ -  + ]:       1507 :   for( i = 0; i < numDoubles; i++ )
      67         [ #  # ]:          0 :     double_list[i] = doubleArray[i];
      68                 :            : 
      69 [ +  - ][ +  - ]:       3014 :   return CubitSimpleAttrib( &string_list, &double_list, &int_list );
      70                 :            : }
      71                 :            : 
      72                 :            :   // compare to a CubitSimpleAttrib
      73                 :       3872 : bool FacetAttrib::equals( const CubitSimpleAttrib& csa ) const
      74                 :            : {
      75                 :            :   // compare counts
      76 [ +  - ][ +  + ]:       9559 :   if( csa.int_data_list().size() != (size_t)numIntegers ||
      77 [ +  + ][ -  + ]:       5687 :       csa.double_data_list().size() != (size_t)numDoubles ||
      78                 :       1815 :       csa.string_data_list().size() != (size_t)numStrings )
      79                 :       2057 :     return false;
      80                 :            : 
      81                 :            :     // compare strings first because most likely the
      82                 :            :     // first string (the name) will differ.
      83         [ +  + ]:       1815 :   if(!std::equal(stringArray, stringArray+numStrings, csa.string_data_list().begin()))
      84                 :        209 :     return false;
      85         [ -  + ]:       1606 :   if(!std::equal(doubleArray, doubleArray+numDoubles, csa.double_data_list().begin()))
      86                 :          0 :     return false;
      87         [ -  + ]:       1606 :   if(!std::equal(integerArray, integerArray+numIntegers, csa.int_data_list().begin()))
      88                 :          0 :     return false;
      89                 :            : 
      90                 :       1606 :   return true;
      91                 :            : }
      92                 :            : 
      93                 :            :   // write to a file at the current file offset
      94                 :       1012 : CubitStatus FacetAttrib::save(FILE *save_file) const
      95                 :            : {
      96         [ -  + ]:       1012 :   if( save_file == NULL)
      97                 :            :   {
      98 [ #  # ][ #  # ]:          0 :     PRINT_ERROR("Problem saving MBG attributes: null FILE ptr\n");
         [ #  # ][ #  # ]
      99                 :          0 :     return CUBIT_FAILURE;
     100                 :            :   }
     101                 :            : 
     102         [ +  - ]:       1012 :   NCubitFile::CIOWrapper wrapper(save_file);
     103                 :            : 
     104                 :            :   // write a version number for the attribute data
     105                 :       1012 :   unsigned int Attrib_Version = 1;
     106         [ +  - ]:       1012 :   wrapper.Write(&Attrib_Version, 1);
     107                 :            : 
     108                 :            :   // write the number of strings, number of doubles, and number of integers
     109                 :       1012 :   int counts[3] = { numStrings, numDoubles, numIntegers };
     110         [ +  - ]:       1012 :   wrapper.Write(reinterpret_cast<unsigned int*>(counts), 3);
     111                 :            : 
     112                 :            :   // write the string data
     113                 :            :   int i;
     114         [ +  + ]:       2024 :   for( i = 0; i < numStrings; i++ )
     115 [ +  - ][ +  - ]:       1012 :     wrapper.Write(stringArray[i].c_str());
     116                 :            : 
     117                 :            :   // write the doubles
     118         [ +  - ]:       1012 :   wrapper.Write(doubleArray, numDoubles);
     119                 :            : 
     120                 :            :   // write the integers
     121         [ +  - ]:       1012 :   wrapper.Write(reinterpret_cast<unsigned int*>(integerArray), numIntegers);
     122                 :            :   
     123         [ +  - ]:       1012 :   return CUBIT_SUCCESS;
     124                 :            : }
     125                 :            : 
     126                 :            : 
     127                 :            :   // read from file starting at current file offset
     128                 :       1012 : FacetAttrib* FacetAttrib::restore(FILE *restore_file, unsigned int endian)
     129                 :            : {
     130         [ -  + ]:       1012 :   if( restore_file == NULL )
     131                 :          0 :     return NULL;
     132                 :            : 
     133         [ +  - ]:       1012 :   NCubitFile::CIOWrapper wrapper(endian, restore_file );
     134                 :            : 
     135                 :            :   // write a version number for the attribute data
     136                 :            :   unsigned int version;
     137         [ +  - ]:       1012 :   wrapper.Read(&version, 1);
     138                 :            : 
     139                 :            :   // haven't handled any version changes yet
     140         [ -  + ]:       1012 :   if( version != 1 )
     141                 :            :   {
     142 [ #  # ][ #  # ]:          0 :     PRINT_ERROR("Wrong FacetAttrib version : %u\n", version );
                 [ #  # ]
           [ #  #  #  # ]
     143                 :          0 :     return NULL;
     144                 :            :   }
     145                 :            : 
     146                 :            :   // read the number of strings, number of doubles, and number of integers
     147                 :            :   int counts[3];
     148         [ +  - ]:       1012 :   wrapper.Read(reinterpret_cast<unsigned int*>(counts), 3);
     149                 :       1012 :   int n_strings = counts[0];
     150                 :       1012 :   int n_doubles = counts[1];
     151                 :       1012 :   int n_ints = counts[2];
     152                 :            :   
     153                 :            :     // allocate arrays, but don't try to allocate zero-length array
     154 [ +  - ][ +  - ]:       2024 :   CubitString* strings = n_strings ? new CubitString[n_strings] : NULL;
         [ +  - ][ +  - ]
         [ +  + ][ #  # ]
     155 [ -  + ][ #  # ]:       1012 :   double *doubles = n_doubles ? new double[n_doubles] : NULL;
                 [ #  # ]
     156 [ +  - ][ +  - ]:       1012 :   int *ints = n_ints ? new int[n_ints] : NULL;
                 [ +  - ]
     157                 :            :   
     158                 :            :   // read the string data
     159                 :            :   int i;
     160         [ +  + ]:       2024 :   for( i = 0; i < n_strings; i++ )
     161                 :            :   {
     162         [ +  - ]:       1012 :     char *string = wrapper.Read();
     163 [ +  - ][ +  - ]:       1012 :     strings[i] = CubitString(string);
                 [ +  - ]
     164         [ +  - ]:       1012 :     delete [] string;
     165                 :            :   }
     166                 :            : 
     167                 :            :   // write the doubles
     168         [ +  - ]:       1012 :   wrapper.Read(doubles, n_doubles);
     169                 :            : 
     170                 :            :   // write the integers
     171         [ +  - ]:       1012 :   wrapper.Read(reinterpret_cast<unsigned int*>(ints), n_ints);
     172                 :            : 
     173 [ +  - ][ +  - ]:       1012 :   return new FacetAttrib(n_strings, strings, n_doubles, doubles, n_ints, ints);
                 [ +  - ]
     174                 :            : }
     175                 :            : 
     176                 :            : 

Generated by: LCOV version 1.11