Fix compilation error after recent libmv change
authorSergey Sharybin <sergey.vfx@gmail.com>
Wed, 9 Oct 2013 19:49:09 +0000 (19:49 +0000)
committerSergey Sharybin <sergey.vfx@gmail.com>
Wed, 9 Oct 2013 19:49:09 +0000 (19:49 +0000)
- Tweaked typedefs in stdint so they match
  what we've got in BLI_sys_types (needed to
  explicitly tell sign to MSVC).

  Not so much harmful to be more explicit here,
  but we really better to have single stdint
  int blender.

- Tweaked allocations macros so MSVC is happy
  with structures allocation.

extern/libmv/libmv-capi.cc
extern/libmv/third_party/msinttypes/stdint.h
intern/guardedalloc/MEM_guardedalloc.h

index a7509fd6b45e780af55865df9e12efe2a929a23c..717c54acd85a312c30af85a53412367bed610bc6 100644 (file)
 #  include <png.h>
 #endif
 
+#if defined(_MSC_VER)
+#  define __func__ __FUNCTION__
+#endif
+
 #ifdef WITH_LIBMV_GUARDED_ALLOC
 #  include "MEM_guardedalloc.h"
 #  define LIBMV_OBJECT_NEW OBJECT_GUARDED_NEW
 #  define LIBMV_OBJECT_DELETE OBJECT_GUARDED_DELETE
 #  define LIBMV_OBJECT_DELETE OBJECT_GUARDED_DELETE
-#  define LIBMV_OBJECT_DELETE_ARRAY OBJECT_GUARDED_DELETE_ARRAY
+#  define LIBMV_STRUCT_NEW(type, count) (type*)MEM_mallocN(sizeof(type) * count, __func__)
+#  define LIBMV_STRUCT_DELETE(what) MEM_freeN(what)
 #else
 // Need this to keep libmv-capi potentially standalone.
 #  if defined __GNUC__ || defined __sun
                        ((type*)(what))->~type(); \
                        free(what); \
        } } (void)0
-#define LIBMV_OBJECT_DELETE_ARRAY(what, type, count) \
-       { if(what) { \
-                       for (int i = 0; i < count; i++) ((type*)(what))[i].~type(); \
-                       free(what); \
-       } } (void)0
+#  define LIBMV_STRUCT_NEW(type, count) (type*)malloc(sizeof(type) * count)
+#  define LIBMV_STRUCT_DELETE(what) { if (what) free(what); } (void)0
 #endif
 
 #include "libmv/logging/logging.h"
@@ -875,7 +877,7 @@ struct libmv_Features *libmv_detectFeaturesFAST(const unsigned char *data,
 {
        libmv::Feature *features = NULL;
        std::vector<libmv::Feature> v;
-       struct libmv_Features *libmv_features = LIBMV_OBJECT_NEW(libmv_Features);
+       struct libmv_Features *libmv_features = LIBMV_STRUCT_NEW(libmv_Features, 1);
        int i = 0, count;
 
        if (margin) {
@@ -889,7 +891,7 @@ struct libmv_Features *libmv_detectFeaturesFAST(const unsigned char *data,
        count = v.size();
 
        if (count) {
-               features = LIBMV_OBJECT_NEW(libmv::Feature[count]);
+               features = LIBMV_STRUCT_NEW(libmv::Feature, count);
 
                for(std::vector<libmv::Feature>::iterator it = v.begin(); it != v.end(); it++) {
                        features[i++] = *it;
@@ -908,7 +910,7 @@ struct libmv_Features *libmv_detectFeaturesMORAVEC(const unsigned char *data,
                                                    int margin, int count, int min_distance)
 {
        libmv::Feature *features = NULL;
-       struct libmv_Features *libmv_features = LIBMV_OBJECT_NEW(libmv_Features);
+       struct libmv_Features *libmv_features = LIBMV_STRUCT_NEW(libmv_Features, 1);
 
        if (count) {
                if (margin) {
@@ -917,7 +919,7 @@ struct libmv_Features *libmv_detectFeaturesMORAVEC(const unsigned char *data,
                        height -= 2 * margin;
                }
 
-               features = LIBMV_OBJECT_NEW(libmv::Feature[count]);
+               features = LIBMV_STRUCT_NEW(libmv::Feature, count);
                libmv::DetectMORAVEC(data, stride, width, height, features, &count, min_distance, NULL);
        }
 
@@ -931,11 +933,10 @@ struct libmv_Features *libmv_detectFeaturesMORAVEC(const unsigned char *data,
 void libmv_featuresDestroy(struct libmv_Features *libmv_features)
 {
        if (libmv_features->features) {
-               using libmv::Feature;
-               LIBMV_OBJECT_DELETE_ARRAY(libmv_features->features, Feature, libmv_features->count);
+               LIBMV_STRUCT_DELETE(libmv_features->features);
        }
 
-       LIBMV_OBJECT_DELETE(libmv_features, libmv_Features);
+       LIBMV_STRUCT_DELETE(libmv_features);
 }
 
 int libmv_countFeatures(const struct libmv_Features *libmv_features)
index e236bb00015d5328f9d9095ea7062aa683f13ddc..189ee34571c9e03d897ceacc2a42cc5b1c96728c 100644 (file)
@@ -72,16 +72,16 @@ extern "C" {
 // realize that, e.g. char has the same size as __int8
 // so we give up on __intX for them.
 #if (_MSC_VER < 1300)
-   typedef char              int8_t;
-   typedef short             int16_t;
-   typedef int               int32_t;
+   typedef signed char       int8_t;
+   typedef signed short      int16_t;
+   typedef signed int        int32_t;
    typedef unsigned char     uint8_t;
    typedef unsigned short    uint16_t;
    typedef unsigned int      uint32_t;
 #else
-   typedef __int8            int8_t;
-   typedef __int16           int16_t;
-   typedef __int32           int32_t;
+   typedef signed __int8            int8_t;
+   typedef signed __int16           int16_t;
+   typedef signed __int32           int32_t;
    typedef unsigned __int8   uint8_t;
    typedef unsigned __int16  uint16_t;
    typedef unsigned __int32  uint32_t;
index aebde0a6425c928ce94d9c1f3a109105eff47998..0b32596b36c6226156e34857c3b6cf64b444f8ae 100644 (file)
@@ -256,12 +256,6 @@ public:                                                                       \
                        ((type*)(what))->~type(); \
                        MEM_freeN(what); \
        } } (void)0
-#define OBJECT_GUARDED_DELETE_ARRAY(what, type, count) \
-       { if(what) { \
-                       for (int i = 0; i < count; i++) ((type*)(what))[i].~type(); \
-                       MEM_freeN(what); \
-       } } (void)0
-
 #endif  /* __cplusplus */
 
 #ifdef __cplusplus