00001 #ifndef Impala_Core_Column_Select_h
00002 #define Impala_Core_Column_Select_h
00003
00004 #include "Core/Column/InvalidColumn.h"
00005
00006 namespace Impala
00007 {
00008 namespace Core
00009 {
00010 namespace Column
00011 {
00012
00013
00019 template <class C1, class C2>
00020 inline int
00021 Select(C1* dst, C2* src, bool* filter, int dstStart, int srcStart, int srcSize)
00022 {
00023 int nr = 0;
00024 for (int i=srcStart ; i<srcSize ; i++)
00025 {
00026 if (!filter || filter[i])
00027 {
00028 dst->Set(dstStart + nr++, src->Get(i));
00029 if (dstStart + nr >= dst->Capacity())
00030 return nr;
00031 }
00032 }
00033 return nr;
00034 }
00035
00036 inline int
00037 Select(InvalidColumn* dst, InvalidColumn* src, bool* filter, int dstStart,
00038 int srcStart, int srcSize)
00039 {
00040
00041 return 0;
00042 }
00043
00044 template <class C2>
00045 inline int
00046 Select(InvalidColumn* dst, C2* src, bool* filter, int dstStart, int srcStart,
00047 int srcSize)
00048 {
00049
00050 return 0;
00051 }
00052
00053 template <class C1>
00054 inline int
00055 Select(C1* dst, InvalidColumn* src, bool* filter, int dstStart, int srcStart,
00056 int srcSize)
00057 {
00058
00059 return 0;
00060 }
00061
00062 }
00063 }
00064 }
00065
00066 #endif