Home || Visual Search || Applications || Architecture || Important Messages || OGL || Src

Reverse.h

Go to the documentation of this file.
00001 #ifndef Impala_Core_Column_Reverse_h
00002 #define Impala_Core_Column_Reverse_h
00003 
00004 #include <iostream>
00005 #include "Core/Column/ColumnTem.h"
00006 #include "Util/Reverse.h"
00007 
00008 namespace Impala
00009 {
00010 namespace Core
00011 {
00012 namespace Column
00013 {
00014 
00015 
00016 template <class C>
00017 inline void
00018 Reverse(C* column, int nrElem)
00019 {
00020     ILOG_VAR(Impala.Core.Column.Reverse);
00021     if (nrElem > column->Capacity())
00022     {
00023         ILOG_ERROR("Too many elements");
00024         return;
00025     }
00026 
00027     Util::Reverse(column->GetData(), 0, nrElem - 1);
00028 }
00029 
00030 template <class C>
00031 inline void
00032 ReversePart(C* column, int left, int right)
00033 {
00034     ILOG_VAR(Impala.Core.Column.ReversePart);
00035     if (column->Capacity() == 0)
00036         return;
00037 
00038     if(left<0 || right>=column->Capacity())
00039     {
00040         ILOG_ERROR("Invalid args");
00041         return;
00042     }
00043 
00044     Util::Reverse(column->GetData(), 0, column->Capacity()-1);
00045 }
00046 
00048 template <>
00049 inline void
00050 ReversePart(Vector::VectorSet<Array::Array2dScalarReal64>* data, int left,
00051             int right)
00052 {
00053     ILOG_VAR(Impala.Core.Column.ReversePart);
00054     typedef Vector::VectorTem<Array::Array2dScalarReal64::StorType> Type;
00055 
00056     if(left<0 || right>=data->Capacity())
00057     {
00058         ILOG_ERROR("Invalid args");
00059         return;
00060     }
00061 
00062     while(left<right)
00063     {
00064         Type temp = data->Get(left);
00065         data->Set(left, data->Get(right));
00066         data->Set(right, temp);
00067         ++left;
00068         --right;
00069     }
00070 }
00071 
00073 template <>
00074 inline void
00075 Reverse(Vector::VectorSet<Array::Array2dScalarReal64>* data, int nrElem)
00076 {
00077     int left = 0;
00078     int right = nrElem - 1;
00079     ReversePart(data, left, right);
00080 }
00081 
00082 template <>
00083 inline void
00084 Reverse(InvalidColumn* data, int nrElem)
00085 {
00086     // ignore
00087 }
00088 
00089 } // namespace Column
00090 } // namespace Core
00091 } // namespace Impala
00092 
00093 #endif

Generated on Thu Jan 13 09:04:13 2011 for ImpalaSrc by  doxygen 1.5.1