Image Component Library (ICL)
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
FixedArray.h
Go to the documentation of this file.
00001 /********************************************************************
00002 **                Image Component Library (ICL)                    **
00003 **                                                                 **
00004 ** Copyright (C) 2006-2013 CITEC, University of Bielefeld          **
00005 **                         Neuroinformatics Group                  **
00006 ** Website: www.iclcv.org and                                      **
00007 **          http://opensource.cit-ec.de/projects/icl               **
00008 **                                                                 **
00009 ** File   : ICLUtils/src/ICLUtils/FixedArray.h                     **
00010 ** Module : ICLUtils                                               **
00011 ** Authors: Christof Elbrechter                                    **
00012 **                                                                 **
00013 **                                                                 **
00014 ** GNU LESSER GENERAL PUBLIC LICENSE                               **
00015 ** This file may be used under the terms of the GNU Lesser General **
00016 ** Public License version 3.0 as published by the                  **
00017 **                                                                 **
00018 ** Free Software Foundation and appearing in the file LICENSE.LGPL **
00019 ** included in the packaging of this file.  Please review the      **
00020 ** following information to ensure the license requirements will   **
00021 ** be met: http://www.gnu.org/licenses/lgpl-3.0.txt                **
00022 **                                                                 **
00023 ** The development of this software was supported by the           **
00024 ** Excellence Cluster EXC 277 Cognitive Interaction Technology.    **
00025 ** The Excellence Cluster EXC 277 is a grant of the Deutsche       **
00026 ** Forschungsgemeinschaft (DFG) in the context of the German       **
00027 ** Excellence Initiative.                                          **
00028 **                                                                 **
00029 ********************************************************************/
00030 
00031 #pragma once
00032 
00033 #include <ICLUtils/CompatMacros.h>
00034 
00035 namespace icl{
00036   namespace utils{
00038 
00044     template<class T,unsigned int DIM>
00045     struct FixedArray{
00046       T m_data[DIM];
00047       
00049       T &operator[](unsigned int idx) { return m_data[idx]; }
00050 
00052       const T &operator[](unsigned int idx) const { return m_data[idx]; }
00053     };
00054     
00056     template<class T>
00057     struct FixedArray<T, 1u>{
00058       union{
00059         T m_data[1];
00060         T x;
00061       };
00062 
00064       FixedArray(){}
00065       
00067       FixedArray(const T &x) : x(x){}
00068 
00070       T &operator[](unsigned int idx) { return m_data[idx]; }
00071 
00073       const T &operator[](unsigned int idx) const { return m_data[idx]; }
00074       
00076       inline operator T() const{
00077         return x;
00078       }
00079     };
00080 
00082     template<class T>
00083     struct FixedArray<T, 2u>{
00084       union{
00085         T m_data[2];
00086         struct { T x; T y; };
00087       };
00088 
00090       FixedArray(){}
00091 
00093       FixedArray(const T &x, const T &y) : x(x),y (y){}
00094 
00096       T &operator[](unsigned int idx) { return m_data[idx]; }
00097 
00099       const T &operator[](unsigned int idx) const { return m_data[idx]; }
00100     };
00101 
00102 
00104     template<class T>
00105     struct FixedArray<T, 3u>{
00106 
00108       FixedArray(){}
00109 
00111       FixedArray(const T &x, const T &y, const T &z) : x(x), y(y), z(z){}
00112 
00113       union{
00114         T m_data[3];
00115         struct { T x; T y; T z; };
00116       };
00118       T &operator[](unsigned int idx) { return m_data[idx]; }
00119 
00121       const T &operator[](unsigned int idx) const { return m_data[idx]; }
00122     };
00123 
00125     template<class T>
00126     struct FixedArray<T, 4u>{
00127 
00129       FixedArray(){}
00130 
00132       FixedArray(const T &x, const T &y, const T &z, const T &w) : x(x), y(y), z(z), w(w){}
00133 
00134       union{
00135         T m_data[4];
00136         struct { 
00137           T x; 
00138           T y; 
00139           T z; 
00140           union { 
00141             T h;
00142             T w;
00143           };
00144         };
00145       };
00146 
00148       T &operator[](unsigned int idx) { return m_data[idx]; }
00149       
00151       const T &operator[](unsigned int idx) const { return m_data[idx]; }
00152     };
00153         
00154   } // namespace utils
00155 } // namespace icl
00156 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines