[arrayfire] 177/248: Add intl/uintl to set functions

Ghislain Vaillant ghisvail-guest at moszumanska.debian.org
Tue Nov 17 15:54:24 UTC 2015


This is an automated email from the git hooks/post-receive script.

ghisvail-guest pushed a commit to branch dfsg-clean
in repository arrayfire.

commit 2e365236da1ea4734f2318cf62ca2e6b65771fb2
Author: Shehzan Mohammed <shehzan at arrayfire.com>
Date:   Wed Oct 21 22:15:31 2015 -0400

    Add intl/uintl to set functions
---
 src/api/c/set.cpp          |  6 ++++++
 src/backend/cpu/set.cpp    |  2 ++
 src/backend/cuda/set.cu    |  2 ++
 src/backend/opencl/set.cpp | 40 ++++++++++++++++++++++++++--------------
 test/set.cpp               |  8 ++++++++
 5 files changed, 44 insertions(+), 14 deletions(-)

diff --git a/src/api/c/set.cpp b/src/api/c/set.cpp
index cada021..1643fad 100644
--- a/src/api/c/set.cpp
+++ b/src/api/c/set.cpp
@@ -38,6 +38,8 @@ af_err af_set_unique(af_array *out, const af_array in, const bool is_sorted)
         case u32: res = setUnique<uint   >(in, is_sorted); break;
         case s16: res = setUnique<short  >(in, is_sorted); break;
         case u16: res = setUnique<ushort >(in, is_sorted); break;
+        case s64: res = setUnique<intl   >(in, is_sorted); break;
+        case u64: res = setUnique<uintl  >(in, is_sorted); break;
         case b8:  res = setUnique<char   >(in, is_sorted); break;
         case u8:  res = setUnique<uchar  >(in, is_sorted); break;
         default: TYPE_ERROR(1, type);
@@ -73,6 +75,8 @@ af_err af_set_union(af_array *out, const af_array first, const af_array second,
         case u32: res = setUnion<uint   >(first, second, is_unique); break;
         case s16: res = setUnion<short  >(first, second, is_unique); break;
         case u16: res = setUnion<ushort >(first, second, is_unique); break;
+        case s64: res = setUnion<intl   >(first, second, is_unique); break;
+        case u64: res = setUnion<uintl  >(first, second, is_unique); break;
         case b8:  res = setUnion<char   >(first, second, is_unique); break;
         case u8:  res = setUnion<uchar  >(first, second, is_unique); break;
         default: TYPE_ERROR(1, first_type);
@@ -107,6 +111,8 @@ af_err af_set_intersect(af_array *out, const af_array first, const af_array seco
         case u32: res = setIntersect<uint   >(first, second, is_unique); break;
         case s16: res = setIntersect<short  >(first, second, is_unique); break;
         case u16: res = setIntersect<ushort >(first, second, is_unique); break;
+        case s64: res = setIntersect<intl   >(first, second, is_unique); break;
+        case u64: res = setIntersect<uintl  >(first, second, is_unique); break;
         case b8:  res = setIntersect<char   >(first, second, is_unique); break;
         case u8:  res = setIntersect<uchar  >(first, second, is_unique); break;
         default: TYPE_ERROR(1, first_type);
diff --git a/src/backend/cpu/set.cpp b/src/backend/cpu/set.cpp
index 26efb2c..3215e6d 100644
--- a/src/backend/cpu/set.cpp
+++ b/src/backend/cpu/set.cpp
@@ -117,4 +117,6 @@ namespace cpu
     INSTANTIATE(uchar)
     INSTANTIATE(short)
     INSTANTIATE(ushort)
+    INSTANTIATE(intl)
+    INSTANTIATE(uintl)
 }
diff --git a/src/backend/cuda/set.cu b/src/backend/cuda/set.cu
index 8887f83..63501d3 100644
--- a/src/backend/cuda/set.cu
+++ b/src/backend/cuda/set.cu
@@ -119,4 +119,6 @@ namespace cuda
     INSTANTIATE(uchar)
     INSTANTIATE(short)
     INSTANTIATE(ushort)
+    INSTANTIATE(intl)
+    INSTANTIATE(uintl)
 }
diff --git a/src/backend/opencl/set.cpp b/src/backend/opencl/set.cpp
index 52e5086..5604ff4 100644
--- a/src/backend/opencl/set.cpp
+++ b/src/backend/opencl/set.cpp
@@ -31,6 +31,16 @@ namespace opencl
 {
     using af::dim4;
 
+    using std::conditional;
+    using std::is_same;
+    template<typename T>
+    using ltype_t = typename conditional<is_same<T, intl>::value, cl_long, T>::type;
+
+    template<typename T>
+    using type_t = typename conditional<is_same<T, uintl>::value,
+                                        cl_ulong, ltype_t<T>
+                                       >::type;
+
     template<typename T>
     Array<T> setUnique(const Array<T> &in,
                        const bool is_sorted)
@@ -42,8 +52,8 @@ namespace opencl
 
             compute::buffer out_data((*out.get())());
 
-            compute::buffer_iterator<T> begin(out_data, 0);
-            compute::buffer_iterator<T> end(out_data, out.dims()[0]);
+            compute::buffer_iterator< type_t<T> > begin(out_data, 0);
+            compute::buffer_iterator< type_t<T> > end(out_data, out.dims()[0]);
 
             if (!is_sorted) {
                 compute::sort(begin, end, queue);
@@ -82,13 +92,13 @@ namespace opencl
             compute::buffer second_data((*unique_second.get())());
             compute::buffer out_data((*out.get())());
 
-            compute::buffer_iterator<T> first_begin(first_data, 0);
-            compute::buffer_iterator<T> first_end(first_data, unique_first.dims()[0]);
-            compute::buffer_iterator<T> second_begin(second_data, 0);
-            compute::buffer_iterator<T> second_end(second_data, unique_second.dims()[0]);
-            compute::buffer_iterator<T> out_begin(out_data, 0);
+            compute::buffer_iterator< type_t<T> > first_begin(first_data, 0);
+            compute::buffer_iterator< type_t<T> > first_end(first_data, unique_first.dims()[0]);
+            compute::buffer_iterator< type_t<T> > second_begin(second_data, 0);
+            compute::buffer_iterator< type_t<T> > second_end(second_data, unique_second.dims()[0]);
+            compute::buffer_iterator< type_t<T> > out_begin(out_data, 0);
 
-            compute::buffer_iterator<T> out_end = compute::set_union(
+            compute::buffer_iterator< type_t<T> > out_end = compute::set_union(
                 first_begin, first_end, second_begin, second_end, out_begin, queue
                 );
 
@@ -123,13 +133,13 @@ namespace opencl
             compute::buffer second_data((*unique_second.get())());
             compute::buffer out_data((*out.get())());
 
-            compute::buffer_iterator<T> first_begin(first_data, 0);
-            compute::buffer_iterator<T> first_end(first_data, unique_first.dims()[0]);
-            compute::buffer_iterator<T> second_begin(second_data, 0);
-            compute::buffer_iterator<T> second_end(second_data, unique_second.dims()[0]);
-            compute::buffer_iterator<T> out_begin(out_data, 0);
+            compute::buffer_iterator< type_t<T> > first_begin(first_data, 0);
+            compute::buffer_iterator< type_t<T> > first_end(first_data, unique_first.dims()[0]);
+            compute::buffer_iterator< type_t<T> > second_begin(second_data, 0);
+            compute::buffer_iterator< type_t<T> > second_end(second_data, unique_second.dims()[0]);
+            compute::buffer_iterator< type_t<T> > out_begin(out_data, 0);
 
-            compute::buffer_iterator<T> out_end = compute::set_intersection(
+            compute::buffer_iterator< type_t<T> > out_end = compute::set_intersection(
                 first_begin, first_end, second_begin, second_end, out_begin, queue
                 );
 
@@ -153,6 +163,8 @@ namespace opencl
     INSTANTIATE(uchar)
     INSTANTIATE(short)
     INSTANTIATE(ushort)
+    INSTANTIATE(intl)
+    INSTANTIATE(uintl)
 }
 
 #pragma GCC diagnostic pop
diff --git a/test/set.cpp b/test/set.cpp
index e879d24..a6d04ed 100644
--- a/test/set.cpp
+++ b/test/set.cpp
@@ -85,6 +85,10 @@ UNIQUE_TESTS(double)
 UNIQUE_TESTS(int)
 UNIQUE_TESTS(uint)
 UNIQUE_TESTS(uchar)
+UNIQUE_TESTS(short)
+UNIQUE_TESTS(ushort)
+UNIQUE_TESTS(intl)
+UNIQUE_TESTS(uintl)
 
 typedef af_err (*setFunc)(af_array *, const af_array, const af_array, const bool);
 
@@ -161,3 +165,7 @@ SET_TESTS(double)
 SET_TESTS(int)
 SET_TESTS(uint)
 SET_TESTS(uchar)
+SET_TESTS(short)
+SET_TESTS(ushort)
+SET_TESTS(intl)
+SET_TESTS(uintl)

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/arrayfire.git



More information about the debian-science-commits mailing list