LCOV - code coverage report
Current view: top level - algs/Qslim - Array.h (source / functions) Hit Total Coverage
Test: coverage_sk.info Lines: 27 29 93.1 %
Date: 2020-07-01 15:24:36 Functions: 19 23 82.6 %
Branches: 19 40 47.5 %

           Branch data     Line data    Source code
       1                 :            : #ifndef GFXTOOLS_ARRAY_INCLUDED // -*- C++ -*-
       2                 :            : #define GFXTOOLS_ARRAY_INCLUDED
       3                 :            : 
       4                 :            : #include <cstring>
       5                 :            : 
       6                 :            : template<class T>
       7                 :            : class array {
       8                 :            : protected:
       9                 :            :     T *data;
      10                 :            :     int len;
      11                 :            : public:
      12                 :       5282 :     array() { data=NULL; len=0; }
      13                 :          4 :     array(int l) { init(l); }
      14                 :      10564 :     ~array() { free(); }
      15                 :            : 
      16                 :            : 
      17                 :            :     inline void init(int l);
      18                 :            :     inline void free();
      19                 :            :     inline void resize(int l);
      20                 :            : 
      21                 :            :     inline T& ref(int i);
      22                 :            :     inline T& operator[](int i) { return data[i]; }
      23                 :     568776 :     inline T& operator()(int i) { return ref(i); }
      24                 :            : 
      25                 :            :     inline const T& ref(int i) const;
      26                 :          0 :     inline const T& operator[](int i) const { return data[i]; }
      27                 :      44868 :     inline const T& operator()(int i) const { return ref(i); }
      28                 :            : 
      29                 :            : 
      30                 :          0 :     inline int length() const { return len; }
      31                 :     182400 :     inline int maxLength() const { return len; }
      32                 :            : };
      33                 :            : 
      34                 :            : template<class T>
      35                 :      10410 : inline void array<T>::init(int l)
      36                 :            : {
      37 [ +  - ][ +  - ]:      30812 :     data = new T[l];
         [ +  - ][ +  + ]
         [ +  - ][ +  - ]
           [ +  +  #  # ]
      38                 :      10410 :     len = l;
      39         [ #  # ]:          4 : }
      40                 :            : 
      41                 :            : template<class T>
      42                 :       5282 : inline void array<T>::free()
      43                 :            : {
      44 [ +  + ][ +  - ]:       5282 :     if( data )
      45                 :            :     {
      46 [ +  - ][ +  + ]:      10408 :         delete[] data;
                 [ +  - ]
      47                 :       5206 :         data = NULL;
      48                 :            :     }
      49                 :       5282 : }
      50                 :            : 
      51                 :            : template<class T>
      52                 :     922432 : inline T& array<T>::ref(int i)
      53                 :            : {
      54                 :            : #ifdef SAFETY
      55                 :            :     assert( data );
      56                 :            :     assert( i>=0 && i<len );
      57                 :            : #endif
      58                 :     922432 :     return data[i];
      59                 :            : }
      60                 :            : 
      61                 :            : template<class T>
      62                 :      22434 : inline const T& array<T>::ref(int i) const
      63                 :            : {
      64                 :            : #ifdef SAFETY
      65                 :            :     assert( data );
      66                 :            :     assert( i>=0 && i<len );
      67                 :            : #endif
      68                 :      22434 :     return data[i];
      69                 :            : }
      70                 :            : 
      71                 :            : template<class T>
      72                 :      10212 : inline void array<T>::resize(int l)
      73                 :            : {
      74                 :      10212 :     T *old = data;
      75 [ +  - ][ #  # ]:      10212 :     data = new T[l];
                 [ #  # ]
      76 [ +  - ][ #  # ]:      10212 :     int minl = (len<l)?len:l;
      77                 :      10212 :     data = (T *)memcpy(data,old,minl*sizeof(T));
      78                 :      10212 :     len = l;
      79         [ +  - ]:      10212 :     delete[] old;
      80                 :      10212 : }
      81                 :            : 
      82                 :            : // GFXTOOLS_ARRAY_INCLUDED
      83                 :            : #endif

Generated by: LCOV version 1.11