text: /**
   * @file
   * This file is part of SeisSol.
   *
   * @author Alexander Breuer (breuer AT mytum.de, http://www5.in.tum.de/wiki/index.php/Dipl.-Math._Alexander_Breuer)
   * @author Carsten Uphoff (c.uphoff AT tum.de, http://www5.in.tum.de/wiki/index.php/Carsten_Uphoff,_M.Sc.)
   *
   * @section LICENSE
   * Copyright (c) 2013-2014, SeisSol Group
   * All rights reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions are met:
   *
   * 1. Redistributions of source code must retain the above copyright notice,
   *    this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright notice,
   *    this list of conditions and the following disclaimer in the documentation
   *    and/or other materials provided with the distribution.
   *
   * 3. Neither the name of the copyright holder nor the names of its
   *    contributors may be used to endorse or promote products derived from this
   *    software without specific prior written permission.
   *
   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   * IMPLIED WARRANTIES OF  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
   * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
   * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
   * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
   * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
   * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   * ARISING IN ANY WAY OUT OF THE  USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
   * POSSIBILITY OF SUCH DAMAGE.
   *
   * @section DESCRIPTION
   * Neighbor kernel of SeisSol.
   **/
  
  #ifndef KERNELS_NEIGHBOR_H_
  #define KERNELS_NEIGHBOR_H_
  
  #include <Initializer/typedefs.hpp>
  #include <generated_code/sizes.h>
  
  namespace seissol {
    namespace kernels {
      class Neighbor;
    }
  }
  
  class seissol::kernels::Neighbor {
    public:
      Neighbor() {}
  
      void computeNeighborsIntegral(  enum faceType const               i_faceTypes[4],
                                      int const                         i_neighboringIndices[4][2],
                                      GlobalData const*                 global,
                                      NeighboringIntegrationData const* neighbor,
                                      real*                             i_timeIntegrated[4],
                                      real                              io_degreesOfFreedom[ NUMBER_OF_ALIGNED_BASIS_FUNCTIONS*NUMBER_OF_QUANTITIES ] );
  
      void flopsNeighborsIntegral( const enum faceType  i_faceTypes[4],
                                   const int            i_neighboringIndices[4][2],
                                   unsigned int        &o_nonZeroFlops,
                                   unsigned int        &o_hardwareFlops );
                                   
      unsigned bytesNeighborsIntegral();
  };
  
  #endif
  