Skip to content
Snippets Groups Projects
tnlEllpackIndexMultimap_impl.h 3.75 KiB
Newer Older
  • Learn to ignore specific revisions
  • /***************************************************************************
                              tnlEllpackIndexMultimap_impl.h  -  description
                                 -------------------
        begin                : Sep 9, 2015
        copyright            : (C) 2015 by Tomas Oberhuber et al.
        email                : tomas.oberhuber@fjfi.cvut.cz
     ***************************************************************************/
    
    /***************************************************************************
     *                                                                         *
     *   This program is free software; you can redistribute it and/or modify  *
     *   it under the terms of the GNU General Public License as published by  *
     *   the Free Software Foundation; either version 2 of the License, or     *
     *   (at your option) any later version.                                   *
     *                                                                         *
     ***************************************************************************/
    
    #ifndef TNLELLPACKINDEXMULTIMAP_IMPL_H
    #define	TNLELLPACKINDEXMULTIMAP_IMPL_H
    
    #include <core/multimaps/tnlEllpackIndexMultimap.h>
    #include <core/multimaps/tnlEllpackIndexMultimapValues.h>
    
    
    template< typename Index,
              typename Device >
    tnlEllpackIndexMultimap< Index, Device >::
    tnlEllpackIndexMultimap()
    :  keysRange( 0 ), valuesRange( 0 ), valuesMaxCount( 0 )
    {
    }
    
    template< typename Index,
              typename Device >
    tnlString tnlEllpackIndexMultimap< Index, Device > :: getType()
    {
       return tnlString( "tnlEllpackIndexMultimap< ") +
              Device :: getDeviceType() +
              tnlString( ", " ) +
              tnlString( ::getType< Index >() ) +                    
              tnlString( " >" );
    }
    
    template< typename Index,
              typename Device >
    tnlString tnlEllpackIndexMultimap< Index, Device >::getTypeVirtual() const
    {
       return this->getType();
    }
    
    template< typename Index,
              typename Device >
    void 
    tnlEllpackIndexMultimap< Index, Device >::
    setRanges( const IndexType inputs,
                   const IndexType outputs )
    {
       this->keysRange = inputs;
       this->valuesRange = outputs;
    }
    
    template< typename Index,
              typename Device >
    const Index
    tnlEllpackIndexMultimap< Index, Device >::
    getKeysRange() const
    {
       return this->keysRange;
    }
    
    template< typename Index,
              typename Device >
    const Index
    tnlEllpackIndexMultimap< Index, Device >::
    getValuesRange() const
    {
       return this->valuesRange;
    }
    
    template< typename Index,
              typename Device >
    void
    tnlEllpackIndexMultimap< Index, Device >::
    allocate( const ValuesAllocationVectorType& portsCount )
    {
       tnlAssert( portsCount.getSize() == this->keysRange,
                  cerr << "portsCount.getSize() =  " << portsCount.getSize()
                       << "this->inputs = " << this->keysRange );
       this->valuesMaxCount = portsCount.max();
       
       tnlAssert( this->valuesMaxCount >= 0 && this->valuesMaxCount <= this->valuesRange, 
                  cerr << "this->portsMaxCount = " << this->valuesMaxCount
                       << " this->outputs = " << this->valuesRange );
       this->values.setSize( this->keysRange * this->valuesMaxCount );
    }
    
    template< typename Index,
              typename Device >
    typename tnlEllpackIndexMultimap< Index, Device >::ValuesAccessorType 
    tnlEllpackIndexMultimap< Index, Device >::
    getValues( const IndexType& inputIndex )
    {
       return ValuesAccessorType( this->values.getData(), inputIndex, this->valuesMaxCount );
    }
    
    template< typename Index,
              typename Device >
    typename tnlEllpackIndexMultimap< Index, Device >::ConstValuesAccessorType
    tnlEllpackIndexMultimap< Index, Device >::
    getValues( const IndexType& inputIndex ) const
    {
       return ConstPortsType( this->values.getData(), inputIndex, this->valuesMaxCount );
    }
    
    #endif	/* TNLELLPACKGRAPH_IMPL_H */