LCOV - code coverage report
Current view: top level - media/webrtc/trunk/webrtc/system_wrappers/include - aligned_array.h (source / functions) Hit Total Coverage
Test: output.info Lines: 0 17 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 7 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*
       2             :  *  Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.
       3             :  *
       4             :  *  Use of this source code is governed by a BSD-style license
       5             :  *  that can be found in the LICENSE file in the root of the source
       6             :  *  tree. An additional intellectual property rights grant can be found
       7             :  *  in the file PATENTS.  All contributing project authors may
       8             :  *  be found in the AUTHORS file in the root of the source tree.
       9             :  */
      10             : 
      11             : #ifndef WEBRTC_SYSTEM_WRAPPERS_INCLUDE_ALIGNED_ARRAY_
      12             : #define WEBRTC_SYSTEM_WRAPPERS_INCLUDE_ALIGNED_ARRAY_
      13             : 
      14             : #include "webrtc/base/checks.h"
      15             : #include "webrtc/system_wrappers/include/aligned_malloc.h"
      16             : 
      17             : namespace webrtc {
      18             : 
      19             : // Wrapper class for aligned arrays. Every row (and the first dimension) are
      20             : // aligned to the given byte alignment.
      21             : template<typename T> class AlignedArray {
      22             :  public:
      23           0 :   AlignedArray(size_t rows, size_t cols, size_t alignment)
      24             :       : rows_(rows),
      25           0 :         cols_(cols) {
      26           0 :     RTC_CHECK_GT(alignment, 0);
      27           0 :     head_row_ = static_cast<T**>(AlignedMalloc(rows_ * sizeof(*head_row_),
      28             :                                                alignment));
      29           0 :     for (size_t i = 0; i < rows_; ++i) {
      30           0 :       head_row_[i] = static_cast<T*>(AlignedMalloc(cols_ * sizeof(**head_row_),
      31             :                                                    alignment));
      32             :     }
      33           0 :   }
      34             : 
      35           0 :   ~AlignedArray() {
      36           0 :     for (size_t i = 0; i < rows_; ++i) {
      37           0 :       AlignedFree(head_row_[i]);
      38             :     }
      39           0 :     AlignedFree(head_row_);
      40           0 :   }
      41             : 
      42           0 :   T* const* Array() {
      43           0 :     return head_row_;
      44             :   }
      45             : 
      46             :   const T* const* Array() const {
      47             :     return head_row_;
      48             :   }
      49             : 
      50           0 :   T* Row(size_t row) {
      51           0 :     RTC_CHECK_LE(row, rows_);
      52           0 :     return head_row_[row];
      53             :   }
      54             : 
      55             :   const T* Row(size_t row) const {
      56             :     RTC_CHECK_LE(row, rows_);
      57             :     return head_row_[row];
      58             :   }
      59             : 
      60             :   T& At(size_t row, size_t col) {
      61             :     RTC_CHECK_LE(col, cols_);
      62             :     return Row(row)[col];
      63             :   }
      64             : 
      65             :   const T& At(size_t row, size_t col) const {
      66             :     RTC_CHECK_LE(col, cols_);
      67             :     return Row(row)[col];
      68             :   }
      69             : 
      70             :   size_t rows() const {
      71             :     return rows_;
      72             :   }
      73             : 
      74             :   size_t cols() const {
      75             :     return cols_;
      76             :   }
      77             : 
      78             :  private:
      79             :   size_t rows_;
      80             :   size_t cols_;
      81             :   T** head_row_;
      82             : };
      83             : 
      84             : }  // namespace webrtc
      85             : 
      86             : #endif  // WEBRTC_SYSTEM_WRAPPERS_INCLUDE_ALIGNED_ARRAY_

Generated by: LCOV version 1.13