[arrayfire] 55/84: Fix colorspace c functions to use exceptions properly

Ghislain Vaillant ghisvail-guest at moszumanska.debian.org
Mon Jan 4 23:22:24 UTC 2016


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

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

commit 1e0ab509188b8bd90cd5e76923722e1a4f6a73bc
Author: Shehzan Mohammed <shehzan at arrayfire.com>
Date:   Mon Dec 28 17:33:21 2015 -0500

    Fix colorspace c functions to use exceptions properly
---
 src/api/c/colorspace.cpp | 63 +++++++++++++++++++++++++++---------------------
 1 file changed, 36 insertions(+), 27 deletions(-)

diff --git a/src/api/c/colorspace.cpp b/src/api/c/colorspace.cpp
index c73424f..eb5b722 100644
--- a/src/api/c/colorspace.cpp
+++ b/src/api/c/colorspace.cpp
@@ -13,23 +13,24 @@
 #include <err_common.hpp>
 
 template<af_cspace_t FROM, af_cspace_t TO>
-af_err convert(af_array *out, const af_array image)
+void color_space(af_array *out, const af_array image)
 {
-    return AF_ERR_NOT_SUPPORTED;
+    AF_ERROR("Color Space: Conversion from source type to output type not supported",
+             AF_ERR_NOT_SUPPORTED);
 }
 
-#define INSTANTIATE_CSPACE_DEFS1(F, T, FUNC)                \
-template<>                                                  \
-af_err convert<F, T>(af_array *out, const af_array image)   \
-{                                                           \
-    return FUNC(out, image);                                \
+#define INSTANTIATE_CSPACE_DEFS1(F, T, FUNC)                    \
+template<>                                                      \
+void color_space<F, T>(af_array *out, const af_array image)     \
+{                                                               \
+    AF_CHECK(FUNC(out, image));                                 \
 }
 
-#define INSTANTIATE_CSPACE_DEFS2(F, T, FUNC, ...)           \
-template<>                                                  \
-af_err convert<F, T>(af_array *out, const af_array image)   \
-{                                                           \
-    return FUNC(out, image, __VA_ARGS__);                   \
+#define INSTANTIATE_CSPACE_DEFS2(F, T, FUNC, ...)               \
+template<>                                                      \
+void color_space<F, T>(af_array *out, const af_array image)     \
+{                                                               \
+    AF_CHECK(FUNC(out, image, __VA_ARGS__));                    \
 }
 
 INSTANTIATE_CSPACE_DEFS1(AF_HSV  , AF_RGB  , af_hsv2rgb  );
@@ -40,28 +41,36 @@ INSTANTIATE_CSPACE_DEFS2(AF_YCbCr, AF_RGB  , af_ycbcr2rgb, AF_YCC_601);
 INSTANTIATE_CSPACE_DEFS2(AF_RGB  , AF_YCbCr, af_rgb2ycbcr, AF_YCC_601);
 
 template<af_cspace_t FROM>
-static af_err convert(af_array *out, const af_array image, const af_cspace_t to)
+static void color_space(af_array *out, const af_array image, const af_cspace_t to)
 {
     switch(to) {
-        case AF_GRAY : return convert<FROM, AF_GRAY >(out, image);
-        case AF_RGB  : return convert<FROM, AF_RGB  >(out, image);
-        case AF_HSV  : return convert<FROM, AF_HSV  >(out, image);
-        case AF_YCbCr: return convert<FROM, AF_YCbCr>(out, image);
-        default: return AF_ERR_ARG;
+        case AF_GRAY : color_space<FROM, AF_GRAY >(out, image);     break;
+        case AF_RGB  : color_space<FROM, AF_RGB  >(out, image);     break;
+        case AF_HSV  : color_space<FROM, AF_HSV  >(out, image);     break;
+        case AF_YCbCr: color_space<FROM, AF_YCbCr>(out, image);     break;
+        default: AF_ERROR("Incorrect enum value for output color type", AF_ERR_ARG);
     }
 }
 
 af_err af_color_space(af_array *out, const af_array image, const af_cspace_t to, const af_cspace_t from)
 {
-    if (from==to) {
-        return af_retain_array(out, image);
-    }
+    try {
+        if (from == to) {
+            return af_retain_array(out, image);
+        }
+
+        ARG_ASSERT(2, (to == AF_GRAY || to == AF_RGB || to == AF_HSV || to == AF_YCbCr));
+        ARG_ASSERT(2, (from == AF_GRAY || from == AF_RGB || from == AF_HSV || from == AF_YCbCr));
 
-    switch(from) {
-        case AF_GRAY : return convert<AF_GRAY >(out, image, to);
-        case AF_RGB  : return convert<AF_RGB  >(out, image, to);
-        case AF_HSV  : return convert<AF_HSV  >(out, image, to);
-        case AF_YCbCr: return convert<AF_YCbCr>(out, image, to);
-        default: return AF_ERR_ARG;
+        switch(from) {
+            case AF_GRAY : color_space<AF_GRAY >(out, image, to);   break;
+            case AF_RGB  : color_space<AF_RGB  >(out, image, to);   break;
+            case AF_HSV  : color_space<AF_HSV  >(out, image, to);   break;
+            case AF_YCbCr: color_space<AF_YCbCr>(out, image, to);   break;
+            default: AF_ERROR("Incorrect enum value for input color type", AF_ERR_ARG);
+        }
     }
+    CATCHALL;
+
+    return AF_SUCCESS;
 }

-- 
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