mirror of
https://github.com/SatDump/SatDump
synced 2026-08-13 17:47:30 -04:00
209 lines
5 KiB
C++
209 lines
5 KiB
C++
/*
|
|
* Copyright 2011-2019, European Organisation for the Exploitation of Meteorological Satellites (EUMETSAT)
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
#ifndef CBlock_included
|
|
#define CBlock_included
|
|
|
|
/*******************************************************************************
|
|
|
|
TYPE:
|
|
Concrete Class
|
|
|
|
PURPOSE:
|
|
Handle generic 8*8 matrix block
|
|
|
|
FUNCTION:
|
|
This class provides functions to store and access a generic 8*8 elements matrix
|
|
|
|
INTERFACES:
|
|
See 'INTERFACES' in the module declaration below
|
|
|
|
RESOURCES:
|
|
Heap Memory (>2K).
|
|
|
|
REFERENCE:
|
|
None
|
|
|
|
PROCESSING:
|
|
class CBlock:
|
|
CBlock () : constructs one block without initializing its elements
|
|
CBlock (T &) contructs one block and initializes all the elements with the specified value
|
|
CBlock (const CBlock<T>&) copy constructor
|
|
operator [] : return the element at the specified linear position
|
|
operator () : return the element at the specified 2D position
|
|
Cget () : return the value of the element at the specified 2D position
|
|
Cset () : set the value of the element at the specified 2D position
|
|
|
|
DATA:
|
|
See 'DATA :' in the class header below.
|
|
|
|
LOGIC:
|
|
|
|
*******************************************************************************/
|
|
|
|
#include "RMAErrorHandling.h"
|
|
|
|
namespace COMP
|
|
{
|
|
template <class T>
|
|
class CBlock
|
|
{
|
|
protected:
|
|
// DATA :
|
|
|
|
T m_data[64]; // contains the 64 data elements
|
|
|
|
public:
|
|
// INTERFACES :
|
|
|
|
// Description: default constructor
|
|
// Return: Nothing
|
|
inline CBlock()
|
|
{
|
|
}
|
|
|
|
// Description: constructor and initialization of all the data elements with the given value
|
|
// Return: Nothing
|
|
inline CBlock(
|
|
const T &i_val // initialization value
|
|
)
|
|
{
|
|
COMP_TRYTHIS
|
|
for (int i = 0; i < 64; i++)
|
|
m_data[i] = i_val;
|
|
COMP_CATCHTHIS
|
|
}
|
|
|
|
// Description: copy constructor
|
|
// Return: Nothing
|
|
inline CBlock(
|
|
const CBlock<T> &i_copy // object to be copied
|
|
)
|
|
{
|
|
COMP_TRYTHIS
|
|
for (int i = 0; i < 64; i++)
|
|
m_data[i] = i_copy.m_data[i];
|
|
COMP_CATCHTHIS
|
|
}
|
|
|
|
// Description: destructor
|
|
// Return: Nothing
|
|
inline ~CBlock()
|
|
{
|
|
}
|
|
|
|
// Description: gets a reference of the specified element
|
|
// Returns: the reference to the specified element
|
|
inline T &operator[](
|
|
const unsigned int &i_index // 1D index of the element
|
|
)
|
|
{
|
|
COMP_TRYTHIS_SPEED
|
|
#ifdef _DEBUG
|
|
Assert(i_index < 64, Util::CParamException());
|
|
#endif
|
|
return m_data[i_index];
|
|
COMP_CATCHTHIS_SPEED
|
|
}
|
|
|
|
// Description: gets a reference to the 2D specified element [1D index=8*i_y+i_x]
|
|
// Returns: the reference to the specified element
|
|
inline T &operator()(
|
|
const unsigned int &i_y, // line index
|
|
const unsigned int &i_x // column index
|
|
)
|
|
{
|
|
COMP_TRYTHIS_SPEED
|
|
#ifdef _DEBUG
|
|
Assert(i_y < 8 && i_x < 8, Util::CParamException());
|
|
#endif
|
|
return m_data[(i_y << 3) + i_x];
|
|
COMP_CATCHTHIS_SPEED
|
|
}
|
|
|
|
// Description: gets the value of the 2D specified element [1D index=8*i_y+i_x]
|
|
// Returns: the value of the specified element
|
|
inline T Cget(
|
|
const unsigned int &i_y, // line index
|
|
const unsigned int &i_x // column index
|
|
)
|
|
const
|
|
{
|
|
COMP_TRYTHIS_SPEED
|
|
#ifdef _DEBUG
|
|
Assert(i_y < 8 && i_x < 8, Util::CParamException());
|
|
#endif
|
|
return m_data[(i_y << 3) + i_x];
|
|
COMP_CATCHTHIS_SPEED
|
|
}
|
|
|
|
// Description: gets the value of the specified element [1D index=i_k]
|
|
// Returns: the value of the specified element
|
|
inline T Cget(
|
|
const unsigned int &i_k // linear index
|
|
)
|
|
const
|
|
{
|
|
COMP_TRYTHIS_SPEED
|
|
#ifdef _DEBUG
|
|
Assert(i_k < 64, Util::CParamException());
|
|
#endif
|
|
return m_data[i_k];
|
|
COMP_CATCHTHIS_SPEED
|
|
}
|
|
|
|
// Description: sets the value of the 2D specified element [1D index=8*i_y+i_x]
|
|
// Returns: nothing
|
|
inline void Cset(
|
|
const unsigned int &i_y, // line index
|
|
const unsigned int &i_x, // column index
|
|
const T &i_val // value
|
|
)
|
|
{
|
|
COMP_TRYTHIS_SPEED
|
|
#ifdef _DEBUG
|
|
Assert(i_y < 8 && i_x < 8, Util::CParamException());
|
|
#endif
|
|
m_data[(i_y << 3) + i_x] = i_val;
|
|
COMP_CATCHTHIS_SPEED
|
|
}
|
|
|
|
// Description: sets the value of the specified element [1D index=i_k]
|
|
// Returns: nothing
|
|
inline void Cset(
|
|
const unsigned int &i_k, // linear index
|
|
const T &i_val // value
|
|
)
|
|
{
|
|
COMP_TRYTHIS_SPEED
|
|
#ifdef _DEBUG
|
|
Assert(i_k < 64, Util::CParamException());
|
|
#endif
|
|
m_data[i_k] = i_val;
|
|
COMP_CATCHTHIS_SPEED
|
|
}
|
|
|
|
// Description: gets base address of the elements buffer
|
|
// Returns: the base address of the elements buffer
|
|
inline T *Get()
|
|
{
|
|
return m_data;
|
|
}
|
|
};
|
|
|
|
} // end namespace
|
|
|
|
#endif
|