From c5e7cfe5d82b4a7bf37ee309856064af5d15dce2 Mon Sep 17 00:00:00 2001 From: A-Baji Date: Fri, 18 Feb 2022 15:23:19 -0600 Subject: [PATCH 01/24] implement 32-bit read flag --- src/mym.cpp | 42 ++++++++++++++++++++++++++---------------- src/mym.h | 8 ++++++++ 2 files changed, 34 insertions(+), 16 deletions(-) diff --git a/src/mym.cpp b/src/mym.cpp index 58689da..31ecf4d 100644 --- a/src/mym.cpp +++ b/src/mym.cpp @@ -52,8 +52,12 @@ typedef size_t mwIndex; //The crazy do{}while(0) constructions circumvents unexpected results when using the macro followed by a semicolon in //an if/else construction -#define READ_UINT64(dst,src) do{ safe_read_64uint( (dst), (_uint64*)(src), 1 ); (src) += sizeof(_uint64); } while(0) -#define READ_UINT64S(dst,src,n) do{ safe_read_64uint( (dst), (_uint64*)(src), n ); (src) += (n) * sizeof(_uint64); } while(0) +#if USE_32BIT_DIMS == 1 + #define READ_UINT(dst,src) do{ safe_read_32uint( (dst), (_uint32*)(src), 1 ); (src) += sizeof(_uint32); } while(0) + #define READ_UINTS(dst,src,n) do{ safe_read_32uint( (dst), (_uint32*)(src), n ); (src) += (n) * sizeof(_uint32); } while(0) +#else + #define READ_UINT(dst,src) do{ safe_read_64uint( (dst), (_uint64*)(src), 1 ); (src) += sizeof(_uint64); } while(0) + #define READ_UINTS(dst,src,n) do{ safe_read_64uint( (dst), (_uint64*)(src), n ); (src) += (n) * sizeof(_uint64); } while(0) // Macro to write fixed size 64 bit uints #define WRITE_UINT64(p,val) do{ *((_uint64*)(p)) = (_uint64)(val); (p) += sizeof(_uint64); }while(0) #define WRITE_UINT64S(p,val,n) do{ _uint64* pTemp = (_uint64*) (p); \ @@ -1727,11 +1731,11 @@ mxArray* deserializeArray(const char *rpSerial, const size_t rlength) // number of dimensions mwSize ndims; - READ_UINT64(&ndims, p_serial); + READ_UINT(&ndims, p_serial); // length of each dimension mwSize *pdims = (mwSize*) mxCalloc(ndims, sizeof(mwSize)); - READ_UINT64S(pdims, p_serial, ndims); + READ_UINTS(pdims, p_serial, ndims); // classID mxClassID class_id; @@ -1770,9 +1774,9 @@ mxArray* deserializeSparse(const char *rpSerial, const size_t rlength) // number of rows and columns mwSize rows, columns, nzmax; - READ_UINT64(&rows, p_serial); - READ_UINT64(&columns, p_serial); - READ_UINT64(&nzmax, p_serial); + READ_UINT(&rows, p_serial); + READ_UINT(&columns, p_serial); + READ_UINT(&nzmax, p_serial); // classID mxClassID class_id; @@ -1796,11 +1800,11 @@ mxArray* deserializeSparse(const char *rpSerial, const size_t rlength) // JC data mwSize* pJcData = mxGetJc(p_array); - READ_UINT64S(pJcData, p_serial, columns+1); + READ_UINTS(pJcData, p_serial, columns+1); // size of IR array mwSize* pIrData = mxGetIr(p_array); - READ_UINT64S(pIrData, p_serial, nzmax); + READ_UINTS(pIrData, p_serial, nzmax); // real part data void* pdata = mxGetData(p_array); @@ -1823,11 +1827,11 @@ mxArray* deserializeStruct(const char* rpSerial, const size_t rlength){ const char*p_serial = rpSerial; // number of dimensions mwSize ndims; - READ_UINT64(&ndims, p_serial); + READ_UINT(&ndims, p_serial); // length of each dimension mwSize *pdims = (mwSize*) mxCalloc(ndims, sizeof(mwSize)); - READ_UINT64S(pdims, p_serial, ndims); + READ_UINTS(pdims, p_serial, ndims); mwSize nelts = 1; for (int i = 0; i #define _uint64 uint64_t #define _int64 int64_t + #define _uint32 uint32_t + #define _int32 int64_t #elif _MSC_VER #define _uint64 unsigned __int64 #define _int64 __int64 + #define _uint32 unsigned __int32 + #define _int32 __int32 #define _WINDOWS 1 #else #error "I don't know how to declare a 64 bit uint for this compiler. Please fix!" @@ -106,6 +113,7 @@ mxArray* deserializeCell(const char* rpSerial, const size_t rlength); int file_length(FILE *f); // get the size of a file in byte unsigned long min_mysql_escape(char* rpout, const char* rpin, const unsigned long nin); void safe_read_64uint(mwSize* dst, _uint64* src, size_t n); +void safe_read_32uint(mwSize* dst, _uint32* src, size_t n); bool isSubstringFountAtTheBeginningCaseInsenstive(const char* sourceString, const char* subString); void removeWhiteSpaceAtTheBeginning(char* string); //void safe_read_64uint(mwSize* dst, unsigned __int64* src, size_t n); From 508a26c4be2947f6800bb136f4d34b85289baf16 Mon Sep 17 00:00:00 2001 From: A-Baji Date: Mon, 21 Feb 2022 13:20:03 -0600 Subject: [PATCH 02/24] get flag from .env --- src/mym.cpp | 18 ++++++++++++++++-- src/mym.h | 4 ---- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/mym.cpp b/src/mym.cpp index 31ecf4d..8f5dd75 100644 --- a/src/mym.cpp +++ b/src/mym.cpp @@ -52,12 +52,14 @@ typedef size_t mwIndex; //The crazy do{}while(0) constructions circumvents unexpected results when using the macro followed by a semicolon in //an if/else construction -#if USE_32BIT_DIMS == 1 +if (use32bitdims()) { #define READ_UINT(dst,src) do{ safe_read_32uint( (dst), (_uint32*)(src), 1 ); (src) += sizeof(_uint32); } while(0) #define READ_UINTS(dst,src,n) do{ safe_read_32uint( (dst), (_uint32*)(src), n ); (src) += (n) * sizeof(_uint32); } while(0) -#else +} +else { #define READ_UINT(dst,src) do{ safe_read_64uint( (dst), (_uint64*)(src), 1 ); (src) += sizeof(_uint64); } while(0) #define READ_UINTS(dst,src,n) do{ safe_read_64uint( (dst), (_uint64*)(src), n ); (src) += (n) * sizeof(_uint64); } while(0) +} // Macro to write fixed size 64 bit uints #define WRITE_UINT64(p,val) do{ *((_uint64*)(p)) = (_uint64)(val); (p) += sizeof(_uint64); }while(0) #define WRITE_UINT64S(p,val,n) do{ _uint64* pTemp = (_uint64*) (p); \ @@ -357,6 +359,18 @@ static void updateplugindir() { mxDestroyArray(mym_fileparts[1]); mxDestroyArray(mym_fileparts[2]); } +/********************************************************************** + *use32bitdims(): Check if dimensions should be read as 32-bit + * Get USE_32_BIT_DIMS environment variable + * Return true/false based on USE_32_BIT_DIMS flag + **********************************************************************/ +static bool use32bitdims() { + if (tolower(getenv("USE_32BIT_DIMS")) == "true") + return true; + else + return false; + +} /********************************************************************** * mysql(): Execute the actual action * Which action we perform is based on the first input argument, diff --git a/src/mym.h b/src/mym.h index b1d5fe6..ba0a153 100644 --- a/src/mym.h +++ b/src/mym.h @@ -36,10 +36,6 @@ #define MYM_VERSION_MINOR 8 #define MYM_VERSION_BUGFIX 2 -// runtime setting to read integers as 32-bit to read blobs created by the 32-bit -// version of the mYm library for MATLAB -#define USE_32BIT_DIMS 0 - // some local defintion #ifndef ulong typedef unsigned long ulong; From 90f2e245bcfada7ec4bfc45a2659a0d1f36bd391 Mon Sep 17 00:00:00 2001 From: A-Baji Date: Mon, 21 Feb 2022 13:21:15 -0600 Subject: [PATCH 03/24] remove white line --- src/mym.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/mym.cpp b/src/mym.cpp index 8f5dd75..2496071 100644 --- a/src/mym.cpp +++ b/src/mym.cpp @@ -369,7 +369,6 @@ static bool use32bitdims() { return true; else return false; - } /********************************************************************** * mysql(): Execute the actual action From 465e96ae1aaf312ef3994cd2726813dee94c5cd4 Mon Sep 17 00:00:00 2001 From: A-Baji Date: Tue, 22 Feb 2022 13:45:33 -0600 Subject: [PATCH 04/24] [wip] mex compile attempt --- distribution/mexa64/mym.mexa64 | Bin 52760 -> 52760 bytes mym.m | 48 --------------------------------- src/mym.cpp | 28 +++++++++++-------- tests/TestExternal.m | 21 +++++++++++++++ 4 files changed, 38 insertions(+), 59 deletions(-) delete mode 100644 mym.m diff --git a/distribution/mexa64/mym.mexa64 b/distribution/mexa64/mym.mexa64 index da7504f32e124398caded0c069b2dc6e2b2c3903..8a29797dc48c5130b0e7eed6947a52b7fc23982a 100755 GIT binary patch literal 52760 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 literal 52760 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ⓈYfLTR;dvP%*>w?DDuyp7YG=5sX4fWZ>ZJ>!qox1 z-&7L}fugK7fLE{=msADH!nO6GKuM&*P)GLh>R;C6oO8$bP88rvWdV5uA%NFn@pg21 zeMxmNP!_4KUXCg@D8Sdxx{(GhFFKd+wcwqdag+I0H@F3>$^wEjP&#fLUatx0S6q50 z$w|F@I{U(LnBy%j3>3~Pz_6(?)cMQDoojo?TfGsAZd4nAAm2R#@ddNy2MT?fgRfu? zBpf#>^%jqM=X6eWkA8y%yE<`VWoT|>v3j9#Ms1`f><#1fx9Kn&dDST&FKzp4Lcy9) z7%xYo613EVzr1|w#DCm`lpr(k#sUlDostr`&^%J~_&)(ap z`09`l631nTe#P%Yl##_OnorDF}T?8EwncW)g98OOK&169GACE<$M z*#ZAWff;_h7Q+|)piHvrHf;FKfe_V)VWVdlfr86sd5it|7`}PM`PR5!K4EM<-lSR@ zytJY+9K^_#2D=Z(Y?xoLrVQ+}D}oK<`R>hZ^1OW9I9r#sP8Nqk_(cT#*g^M>skg12 zI+jhI~6dX3UsdI4>~Ii+6_t zMtK+&^71Z#m*oe>XN}LA1QBaWsx@lCg205ViAHrp0i#9jav5lV{tz2N=7L~&mVtL@ zsi5v`s+WhZtqQ>91Ne11TS&qQL|~(SE1@?&p*p;J9xm@81O@b0mnkUzks5gwaTY?eFwIwQW9c4= zZsgTlSfT@yhJ1Np&w%zzE1*C7K&3P%elHEo#XFI7yg+F~NnkNUM*yz@mR98DbTyqc`$yX}L5rADZUK&B2)9O*-VD=EABV zf1+V-<#p_=eNZiJ(`;bVihQm}Z7U*EC_ltEv=19be`uC^;}(@?;FmSi+g1%Lys4{>*u^9fHO|UW5?)lU{U)Rhf^j<+z4yE#8(kjqNlt8-z$y8anaaC<)Xw8 zBTl%s$J9{WP;5CoG-R_~P~z3w9`OmkfKvjIx`iweMqYOBRSuh4)r8)wUM&Zv0Nrdr zs&g$CP*&%pjS~EHKq*$(&Yng$RX@*THKss&b1IHv5ztGFRR-d$@UF=L;rQ@nP`7w3 zrqE*oJIpX)zg+AJtz}tJ`k+`>p;2ZR7B)v($1Zy7tiqn6Z)!`c9pqhZXNvgD8W8IVWZvG-* z9j5x;WYeJubL4-Rq>QZ4@@o7n1yZ=Vq!m^U@2dy1mefSD7Dp9p3ONkYV>_9-*(q#dV)(5LfSYPMrs=`K=tiZF7&B9Mj7+GQbe1nn2ds`6I z(vgjzs|1?$zXMgO^2TrSpN~8Ac1X&f{3Ae*7r%lg5&tym*!2AI~&e^{sO|R@zD; zTf%t#hEP&pJKp-wGU?z+)x3 ztn)%vYMmF=#nKNe&-ADGXRmLaE3#7gEdpBw>p8lWCVJGj&L3H+C9lPzC(K{8w6|}a zQ?k;^*;Y-JTJ2ic-}I<&ooBLAZ2Nb+diu`;y1q4j*10DuZNR>r{p#8NV?F9y=cBCj zQ+s9Pd$zx!M}6xYm6d+oqe4&pZR%0qI&WpABmYbLucDk?wCvM5mo?-*Rk3G(t@f>S z7s%YU`qufak-EM`r?_?5uZ5?6IQ~}q);X`S|E0dg?@MH8`&NDHJXp4_-=YWBQlr(b z)vuqUuDyNh+}Mu$RSP3klKN}ax6(sB>Zi_^wWul$mSCELRnJO!{>k3Hbq=lJK~=$u z6S{iJ|1Fr`?I16!nU)7VQnX6fZzOZu<+0_N9jMzM+XHXaAJYSGv9qU^@7PIOb^AN? v!-Z2(I1m4#ts~ptU{x&uZ7AJ=&pu-V2K2gdP=ofX4p;CQ)yJ diff --git a/mym.m b/mym.m deleted file mode 100644 index c9a0a6d..0000000 --- a/mym.m +++ /dev/null @@ -1,48 +0,0 @@ -% setupMYM (invoked only first time to set path and removes itself) -function varargout = mym(varargin) - warning('mYm:Setup:FirstInvocation', 'Setting mym to path as first invocation.'); - % determine state - origDir = pwd; - ext = dbstack; - ext = ext.file; - [~,~,ext] = fileparts(ext); - filename = [mfilename('fullpath') ext]; - % add to mex-path as appropriate (persist) - toolboxName = 'mym'; - s = settings; - if verLessThan('matlab', '9.5') - toolboxRoot = [strrep(s.matlab.addons.InstallationFolder.ActiveValue, '\', '/') ... - '/Toolboxes/' toolboxName '/code']; - else - toolboxRoot = [strrep(s.matlab.addons.InstallationFolder.ActiveValue, '\', '/') ... - '/Toolboxes/' toolboxName]; - end - mymPath = [toolboxRoot '/distribution/' mexext]; - addpath(mymPath); - pathfile = fullfile(userpath, 'startup.m'); - if exist(pathfile, 'file') == 2 - fid = fopen(pathfile, 'r'); - f = fread(fid, '*char')'; - fclose(fid); - if ~contains(f, ['addpath(''' mymPath ''');']) - f = [['addpath(''' mymPath ''');'] newline f]; - fid = fopen(pathfile, 'w'); - fprintf(fid, '%s', f); - fclose(fid); - end - elseif exist(pathfile, 'file') == 0 - fid = fopen(pathfile, 'a+'); - fprintf(fid, '\n%s\n',['addpath(''' mymPath ''');']); - fclose(fid); - end - % determine proper mym response and restore state - cd(mymPath); - if nargout - [varargout{1:nargout}] = mym(varargin{:}); - else - mym(varargin{:}); - end - cd(origDir); - % remove file to prevent collisions - delete(filename); -end \ No newline at end of file diff --git a/src/mym.cpp b/src/mym.cpp index 2496071..307604d 100644 --- a/src/mym.cpp +++ b/src/mym.cpp @@ -52,14 +52,15 @@ typedef size_t mwIndex; //The crazy do{}while(0) constructions circumvents unexpected results when using the macro followed by a semicolon in //an if/else construction -if (use32bitdims()) { - #define READ_UINT(dst,src) do{ safe_read_32uint( (dst), (_uint32*)(src), 1 ); (src) += sizeof(_uint32); } while(0) - #define READ_UINTS(dst,src,n) do{ safe_read_32uint( (dst), (_uint32*)(src), n ); (src) += (n) * sizeof(_uint32); } while(0) -} -else { - #define READ_UINT(dst,src) do{ safe_read_64uint( (dst), (_uint64*)(src), 1 ); (src) += sizeof(_uint64); } while(0) - #define READ_UINTS(dst,src,n) do{ safe_read_64uint( (dst), (_uint64*)(src), n ); (src) += (n) * sizeof(_uint64); } while(0) -} +// #define READ_UINT(dst,src) do{ safe_read_64uint( (dst), (_uint64*)(src), 1 ); (src) += sizeof(_uint64); } while(0) +// #define READ_UINTS(dst,src,n) do{ safe_read_64uint( (dst), (_uint64*)(src), n ); (src) += (n) * sizeof(_uint64); } while(0) +#define READ_UINT(dst,src) \ + if (use32BitDims) do{ safe_read_32uint( (dst), (_uint32*)(src), 1 ); (src) += sizeof(_uint32); } while(0); \ + else do{ safe_read_64uint( (dst), (_uint64*)(src), 1 ); (src) += sizeof(_uint64); } while(0) +#define READ_UINTS(dst,src,n) \ + if (use32BitDims) do{ safe_read_32uint( (dst), (_uint32*)(src), n ); (src) += (n) * sizeof(_uint32); } while(0); \ + else do{ safe_read_64uint( (dst), (_uint64*)(src), n ); (src) += (n) * sizeof(_uint64); } while(0) + // Macro to write fixed size 64 bit uints #define WRITE_UINT64(p,val) do{ *((_uint64*)(p)) = (_uint64)(val); (p) += sizeof(_uint64); }while(0) #define WRITE_UINT64S(p,val,n) do{ _uint64* pTemp = (_uint64*) (p); \ @@ -360,16 +361,21 @@ static void updateplugindir() { mxDestroyArray(mym_fileparts[2]); } /********************************************************************** - *use32bitdims(): Check if dimensions should be read as 32-bit + *set32bitdimsflag(): Check if dimensions should be read as 32-bit * Get USE_32_BIT_DIMS environment variable * Return true/false based on USE_32_BIT_DIMS flag **********************************************************************/ -static bool use32bitdims() { - if (tolower(getenv("USE_32BIT_DIMS")) == "true") +static bool set32bitdimsflag() { + char *flag = getenv("USE_32BIT_DIMS"); + for (int i=0; i<=strlen(flag); i++) + flag[i]=tolower(flag[i]); + + if (flag == "true") return true; else return false; } +bool use32BitDims = set32bitdimsflag(); /********************************************************************** * mysql(): Execute the actual action * Which action we perform is based on the first input argument, diff --git a/tests/TestExternal.m b/tests/TestExternal.m index 6f76040..d9d4f68 100644 --- a/tests/TestExternal.m +++ b/tests/TestExternal.m @@ -90,6 +90,27 @@ function TestExternal_testdj0Error(testCase) testCase.verifyEqual(ME.identifier, 'mYm:CrossPlatform:Compatibility'); end end + % function TestExternal_test32BitRead(testCase) + % st = dbstack; + % disp(['---------------' st(1).name '---------------']); + % % https://github.com/datajoint/mym/issues/85 + % % normal dj0 + % % python: pack([1,2,3]).hex().upper() + % value = ['6D596D00530200000001000000010000000400000068697473007369646573007461736B73007374616765004D000000410200000001000000070000000600000000000000000000000000F8FF000000000000F03F000000000000F03F0000000000000000000000000000F03F0000000000000000000000000000F8FF230000004102000000010000000700000004000000000000006C006C006C006C00720072006C002300000041020000000100000007000000040000000000000064006400640064006400640064002500000041020000000100000008000000040000000000000053007400610067006500200031003000']; + % hexstring = value'; + % reshapedString = reshape(hexstring,2,length(value)/2); + % hexMtx = reshapedString.'; + % decMtx = hex2dec(hexMtx); + % packed = uint8(decMtx); + % try + % setenv('USE_32BIT_DIMS', 'true'); + % unpacked = mym('deserialize', packed); + % setenv('USE_32BIT_DIMS', 'false'); + % disp(unpacked); + % catch ME + % testCase.verifyEqual(ME.identifier, 'mYm:CrossPlatform:Compatibility'); + % end + % end end methods (Static) function TestExternal_verify(testCase, array_tests) From dd42f2638d5b724557202e20c067ff495ce2e59b Mon Sep 17 00:00:00 2001 From: A-Baji Date: Tue, 22 Feb 2022 13:55:48 -0600 Subject: [PATCH 05/24] [wip] _int32 definition --- src/mym.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mym.h b/src/mym.h index ba0a153..1a1cdea 100644 --- a/src/mym.h +++ b/src/mym.h @@ -57,7 +57,7 @@ #define _uint64 uint64_t #define _int64 int64_t #define _uint32 uint32_t - #define _int32 int64_t + #define _int32 int32_t #elif _MSC_VER #define _uint64 unsigned __int64 #define _int64 __int64 From 80b67ca0a0b8b89e202c5765496f4bf7ab97cb0f Mon Sep 17 00:00:00 2001 From: A-Baji Date: Wed, 23 Feb 2022 16:02:27 -0600 Subject: [PATCH 06/24] mex compiles and test passes --- distribution/mexa64/mym.mexa64 | Bin 52760 -> 52856 bytes src/mym.cpp | 25 +++++++++------------ tests/TestExternal.m | 40 ++++++++++++++++----------------- 3 files changed, 30 insertions(+), 35 deletions(-) diff --git a/distribution/mexa64/mym.mexa64 b/distribution/mexa64/mym.mexa64 index 8a29797dc48c5130b0e7eed6947a52b7fc23982a..3e203ff42fbda64038e55a6d6f2bc043c5229ba7 100755 GIT binary patch delta 18122 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 Md#EOnc`)k#04Fg~9RL6T diff --git a/src/mym.cpp b/src/mym.cpp index 307604d..6c7635c 100644 --- a/src/mym.cpp +++ b/src/mym.cpp @@ -52,13 +52,11 @@ typedef size_t mwIndex; //The crazy do{}while(0) constructions circumvents unexpected results when using the macro followed by a semicolon in //an if/else construction -// #define READ_UINT(dst,src) do{ safe_read_64uint( (dst), (_uint64*)(src), 1 ); (src) += sizeof(_uint64); } while(0) -// #define READ_UINTS(dst,src,n) do{ safe_read_64uint( (dst), (_uint64*)(src), n ); (src) += (n) * sizeof(_uint64); } while(0) #define READ_UINT(dst,src) \ - if (use32BitDims) do{ safe_read_32uint( (dst), (_uint32*)(src), 1 ); (src) += sizeof(_uint32); } while(0); \ + if (use32bitdims()) do{ safe_read_32uint( (dst), (_uint32*)(src), 1 ); (src) += sizeof(_uint32); } while(0); \ else do{ safe_read_64uint( (dst), (_uint64*)(src), 1 ); (src) += sizeof(_uint64); } while(0) #define READ_UINTS(dst,src,n) \ - if (use32BitDims) do{ safe_read_32uint( (dst), (_uint32*)(src), n ); (src) += (n) * sizeof(_uint32); } while(0); \ + if (use32bitdims()) do{ safe_read_32uint( (dst), (_uint32*)(src), n ); (src) += (n) * sizeof(_uint32); } while(0); \ else do{ safe_read_64uint( (dst), (_uint64*)(src), n ); (src) += (n) * sizeof(_uint64); } while(0) // Macro to write fixed size 64 bit uints @@ -361,21 +359,20 @@ static void updateplugindir() { mxDestroyArray(mym_fileparts[2]); } /********************************************************************** - *set32bitdimsflag(): Check if dimensions should be read as 32-bit + *use32bitdims(): Check if dimensions should be read as 32-bit * Get USE_32_BIT_DIMS environment variable * Return true/false based on USE_32_BIT_DIMS flag **********************************************************************/ -static bool set32bitdimsflag() { - char *flag = getenv("USE_32BIT_DIMS"); - for (int i=0; i<=strlen(flag); i++) - flag[i]=tolower(flag[i]); - - if (flag == "true") - return true; - else +static bool use32bitdims() { + if (getenv("USE_32BIT_DIMS")) { + if (strcasecmp(getenv("USE_32BIT_DIMS"), "true") == 0) + return true; + else + return false; + } + else return false; } -bool use32BitDims = set32bitdimsflag(); /********************************************************************** * mysql(): Execute the actual action * Which action we perform is based on the first input argument, diff --git a/tests/TestExternal.m b/tests/TestExternal.m index d9d4f68..7d0fb5f 100644 --- a/tests/TestExternal.m +++ b/tests/TestExternal.m @@ -90,27 +90,25 @@ function TestExternal_testdj0Error(testCase) testCase.verifyEqual(ME.identifier, 'mYm:CrossPlatform:Compatibility'); end end - % function TestExternal_test32BitRead(testCase) - % st = dbstack; - % disp(['---------------' st(1).name '---------------']); - % % https://github.com/datajoint/mym/issues/85 - % % normal dj0 - % % python: pack([1,2,3]).hex().upper() - % value = ['6D596D00530200000001000000010000000400000068697473007369646573007461736B73007374616765004D000000410200000001000000070000000600000000000000000000000000F8FF000000000000F03F000000000000F03F0000000000000000000000000000F03F0000000000000000000000000000F8FF230000004102000000010000000700000004000000000000006C006C006C006C00720072006C002300000041020000000100000007000000040000000000000064006400640064006400640064002500000041020000000100000008000000040000000000000053007400610067006500200031003000']; - % hexstring = value'; - % reshapedString = reshape(hexstring,2,length(value)/2); - % hexMtx = reshapedString.'; - % decMtx = hex2dec(hexMtx); - % packed = uint8(decMtx); - % try - % setenv('USE_32BIT_DIMS', 'true'); - % unpacked = mym('deserialize', packed); - % setenv('USE_32BIT_DIMS', 'false'); - % disp(unpacked); - % catch ME - % testCase.verifyEqual(ME.identifier, 'mYm:CrossPlatform:Compatibility'); - % end - % end + function TestExternal_test32BitRead(testCase) + st = dbstack; + disp(['---------------' st(1).name '---------------']); + % https://github.com/datajoint/mym/issues/86 + value = ['6D596D00530200000001000000010000000400000068697473007369646573007461736B73007374616765004D000000410200000001000000070000000600000000000000000000000000F8FF000000000000F03F000000000000F03F0000000000000000000000000000F03F0000000000000000000000000000F8FF230000004102000000010000000700000004000000000000006C006C006C006C00720072006C002300000041020000000100000007000000040000000000000064006400640064006400640064002500000041020000000100000008000000040000000000000053007400610067006500200031003000']; + hexstring = value'; + reshapedString = reshape(hexstring,2,length(value)/2); + hexMtx = reshapedString.'; + decMtx = hex2dec(hexMtx); + packed = uint8(decMtx); + try + setenv('USE_32BIT_DIMS', 'true'); + unpacked = mym('deserialize', packed); + setenv('USE_32BIT_DIMS', 'false'); + disp(unpacked); + catch ME + testCase.verifyEqual(ME.identifier, 'mYm:CrossPlatform:Compatibility'); + end + end end methods (Static) function TestExternal_verify(testCase, array_tests) From 9e9477dc23613171112c7ecb01e8354aa66ef70b Mon Sep 17 00:00:00 2001 From: A-Baji Date: Wed, 23 Feb 2022 17:03:07 -0600 Subject: [PATCH 07/24] whiteline --- src/mym.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/mym.h b/src/mym.h index 1a1cdea..48f8f39 100644 --- a/src/mym.h +++ b/src/mym.h @@ -36,6 +36,7 @@ #define MYM_VERSION_MINOR 8 #define MYM_VERSION_BUGFIX 2 + // some local defintion #ifndef ulong typedef unsigned long ulong; From 9f71dea6f5ce6e396b68d17cc1d74b97a4f2ff26 Mon Sep 17 00:00:00 2001 From: A-Baji Date: Thu, 24 Feb 2022 09:42:49 -0600 Subject: [PATCH 08/24] remove disp line --- tests/TestExternal.m | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/TestExternal.m b/tests/TestExternal.m index 7d0fb5f..cb8fd1e 100644 --- a/tests/TestExternal.m +++ b/tests/TestExternal.m @@ -104,7 +104,6 @@ function TestExternal_test32BitRead(testCase) setenv('USE_32BIT_DIMS', 'true'); unpacked = mym('deserialize', packed); setenv('USE_32BIT_DIMS', 'false'); - disp(unpacked); catch ME testCase.verifyEqual(ME.identifier, 'mYm:CrossPlatform:Compatibility'); end From a6889e3d8dda22ecc633cbbc8a6d899db11c4a55 Mon Sep 17 00:00:00 2001 From: A-Baji Date: Fri, 25 Feb 2022 12:04:37 -0600 Subject: [PATCH 09/24] simplify function --- src/mym.cpp | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/mym.cpp b/src/mym.cpp index 6c7635c..482a92e 100644 --- a/src/mym.cpp +++ b/src/mym.cpp @@ -364,12 +364,8 @@ static void updateplugindir() { * Return true/false based on USE_32_BIT_DIMS flag **********************************************************************/ static bool use32bitdims() { - if (getenv("USE_32BIT_DIMS")) { - if (strcasecmp(getenv("USE_32BIT_DIMS"), "true") == 0) - return true; - else - return false; - } + if (getenv("USE_32BIT_DIMS")) + return strcasecmp(getenv("USE_32BIT_DIMS"), "true") == 0 else return false; } From 472bcdb117906591441a4063c92b203bbe1dab4e Mon Sep 17 00:00:00 2001 From: A-Baji Date: Fri, 25 Feb 2022 12:07:20 -0600 Subject: [PATCH 10/24] missing ; --- src/mym.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mym.cpp b/src/mym.cpp index 482a92e..fc84d7c 100644 --- a/src/mym.cpp +++ b/src/mym.cpp @@ -365,7 +365,7 @@ static void updateplugindir() { **********************************************************************/ static bool use32bitdims() { if (getenv("USE_32BIT_DIMS")) - return strcasecmp(getenv("USE_32BIT_DIMS"), "true") == 0 + return strcasecmp(getenv("USE_32BIT_DIMS"), "true") == 0; else return false; } From 1514f7fd9e21a37f3ffd6f774b35987dc8f41fe3 Mon Sep 17 00:00:00 2001 From: A-Baji Date: Fri, 25 Feb 2022 16:40:17 -0600 Subject: [PATCH 11/24] github actions test --- .github/workflows/integration.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/integration.yml b/.github/workflows/integration.yml index 4ed276d..a08f8a2 100644 --- a/.github/workflows/integration.yml +++ b/.github/workflows/integration.yml @@ -19,8 +19,8 @@ jobs: include: - matlab_version: "R2018b" mysql_version: "5.7" - - matlab_version: "R2016b" - mysql_version: "5.7" + # - matlab_version: "R2016b" + # mysql_version: "5.7" steps: - uses: actions/checkout@v2 - name: Run primary tests From b27d5d69c62c5f4e5fe29bfcaed331761169fe6a Mon Sep 17 00:00:00 2001 From: A-Baji Date: Fri, 25 Feb 2022 17:15:40 -0600 Subject: [PATCH 12/24] github actions test --- .github/workflows/integration.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/integration.yml b/.github/workflows/integration.yml index a08f8a2..4ed276d 100644 --- a/.github/workflows/integration.yml +++ b/.github/workflows/integration.yml @@ -19,8 +19,8 @@ jobs: include: - matlab_version: "R2018b" mysql_version: "5.7" - # - matlab_version: "R2016b" - # mysql_version: "5.7" + - matlab_version: "R2016b" + mysql_version: "5.7" steps: - uses: actions/checkout@v2 - name: Run primary tests From f249f598d729009dafd532ce72d83dab47feb9af Mon Sep 17 00:00:00 2001 From: A-Baji Date: Mon, 28 Feb 2022 10:12:17 -0600 Subject: [PATCH 13/24] re-add mym.h --- mym.m | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 mym.m diff --git a/mym.m b/mym.m new file mode 100644 index 0000000..c9a0a6d --- /dev/null +++ b/mym.m @@ -0,0 +1,48 @@ +% setupMYM (invoked only first time to set path and removes itself) +function varargout = mym(varargin) + warning('mYm:Setup:FirstInvocation', 'Setting mym to path as first invocation.'); + % determine state + origDir = pwd; + ext = dbstack; + ext = ext.file; + [~,~,ext] = fileparts(ext); + filename = [mfilename('fullpath') ext]; + % add to mex-path as appropriate (persist) + toolboxName = 'mym'; + s = settings; + if verLessThan('matlab', '9.5') + toolboxRoot = [strrep(s.matlab.addons.InstallationFolder.ActiveValue, '\', '/') ... + '/Toolboxes/' toolboxName '/code']; + else + toolboxRoot = [strrep(s.matlab.addons.InstallationFolder.ActiveValue, '\', '/') ... + '/Toolboxes/' toolboxName]; + end + mymPath = [toolboxRoot '/distribution/' mexext]; + addpath(mymPath); + pathfile = fullfile(userpath, 'startup.m'); + if exist(pathfile, 'file') == 2 + fid = fopen(pathfile, 'r'); + f = fread(fid, '*char')'; + fclose(fid); + if ~contains(f, ['addpath(''' mymPath ''');']) + f = [['addpath(''' mymPath ''');'] newline f]; + fid = fopen(pathfile, 'w'); + fprintf(fid, '%s', f); + fclose(fid); + end + elseif exist(pathfile, 'file') == 0 + fid = fopen(pathfile, 'a+'); + fprintf(fid, '\n%s\n',['addpath(''' mymPath ''');']); + fclose(fid); + end + % determine proper mym response and restore state + cd(mymPath); + if nargout + [varargout{1:nargout}] = mym(varargin{:}); + else + mym(varargin{:}); + end + cd(origDir); + % remove file to prevent collisions + delete(filename); +end \ No newline at end of file From 9e71517c8854ff7cb1019bb4e9ee688f34fa10bf Mon Sep 17 00:00:00 2001 From: A-Baji Date: Mon, 28 Feb 2022 10:16:17 -0600 Subject: [PATCH 14/24] remove 2016b test --- .github/workflows/integration.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/integration.yml b/.github/workflows/integration.yml index 4ed276d..a08f8a2 100644 --- a/.github/workflows/integration.yml +++ b/.github/workflows/integration.yml @@ -19,8 +19,8 @@ jobs: include: - matlab_version: "R2018b" mysql_version: "5.7" - - matlab_version: "R2016b" - mysql_version: "5.7" + # - matlab_version: "R2016b" + # mysql_version: "5.7" steps: - uses: actions/checkout@v2 - name: Run primary tests From c588b41d306ba5f36f1b0585a613ce9158f742fc Mon Sep 17 00:00:00 2001 From: A-Baji Date: Tue, 1 Mar 2022 15:30:56 -0600 Subject: [PATCH 15/24] bump mym ver update test --- src/mym.h | 2 +- tests/TestExternal.m | 19 ++++++++++++------- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/mym.h b/src/mym.h index 48f8f39..753f63c 100644 --- a/src/mym.h +++ b/src/mym.h @@ -34,7 +34,7 @@ // mym version information #define MYM_VERSION_MAJOR 2 #define MYM_VERSION_MINOR 8 -#define MYM_VERSION_BUGFIX 2 +#define MYM_VERSION_BUGFIX 3 // some local defintion diff --git a/tests/TestExternal.m b/tests/TestExternal.m index cb8fd1e..dab3590 100644 --- a/tests/TestExternal.m +++ b/tests/TestExternal.m @@ -100,13 +100,18 @@ function TestExternal_test32BitRead(testCase) hexMtx = reshapedString.'; decMtx = hex2dec(hexMtx); packed = uint8(decMtx); - try - setenv('USE_32BIT_DIMS', 'true'); - unpacked = mym('deserialize', packed); - setenv('USE_32BIT_DIMS', 'false'); - catch ME - testCase.verifyEqual(ME.identifier, 'mYm:CrossPlatform:Compatibility'); - end + + data = struct; + data.stage = 'Stage 10'; + data.tasks = 'ddddddd'; + data.sides = 'llllrrl'; + data.hits = [NaN,1,1,0,1,0,NaN]; + + setenv('USE_32BIT_DIMS', 'true'); + unpacked = mym('deserialize', packed); + setenv('USE_32BIT_DIMS', 'false'); + + testCase.verifyEqual(unpacked, data); end end methods (Static) From 01cc0406a0e3a85e69d44327276b6becc793b516 Mon Sep 17 00:00:00 2001 From: A-Baji Date: Tue, 1 Mar 2022 16:48:33 -0600 Subject: [PATCH 16/24] bump linux binary --- distribution/mexa64/mym.mexa64 | Bin 52856 -> 52856 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/distribution/mexa64/mym.mexa64 b/distribution/mexa64/mym.mexa64 index 3e203ff42fbda64038e55a6d6f2bc043c5229ba7..27c23df7b3aaf4f31f1620992fea860a59095e0f 100755 GIT binary patch delta 709 zcmZ{iO=uHQ5Xax_7L!L5cX2@81~DrDbEmC1kN$pb;YRj!*;z7Y9B6vmtsh;rqv*Z;lA6(Sd3fu+HZ=L>V~xwD7o zAHBSk{QPUWf8`tggauHTBUv#p*quYE2z#PA05SZn9|Z#wh6PDH&;4<93`;#1Aw=Pw zm(r_ILMF%zJ}|6AL1b?w=P4mFNpc=r3EvoIVp%+$AK15SI*2aYF;2(gU++$m{Qd5d zH2RXi_dfbgs0hoXv?yF;v(qpG*V%;|vl7Vc;o`qIQHYWwQ8#;b(yyac%O_O)6H+5Mj9`-r;V`6*F7XTi%pWf!>bSuN9 zPU|Yq!1@u^YxN+Zq{ILsY{-NFF^JFF&rTfULu`G>(4iJohp2wE=|B%?fJIJmBcM2z zIdueeu+J$RzKiOnO~Y0SD{k5n{kwBm{$x{E{E&-%PM#nS)t;?}3l}b8jyXL``U7co BxK#iE delta 790 zcmZ{iL1+_E5Qg9E7Lz3kU7GABLbBT+v?;V9r`#l9(Jg{;y_o2s!BYga5i06IXb~?K zY2%!fCTTFm;4QvO1&hH7rWnCo#9lAr<}a1Jwk^ZuQAv-5UW<=s_z zWnt7Ru>-S8=07oW#L0gtR`t=m5aor)jRnaO6^c7={#$87h&J#Q82;4Ojmt}8&t5-z zIDT^c$?~_~e?I@fUvLeAJS!PKi153|q8`tQ^o5x-Gw1kI|0M{Ic$_vsL1Mt_He-G# z#UiL`21GGIehO{PP*bEHrqlV@V=rSv>?|&7M&hE#-a39&VN7OGQPZ89qz9IoaN>FF zXgXy0Pi@LK{PCX2tOw0`ssG8k|IWL`<59mCLVS7xPQffceSKO2i7(AL9 z`9zPSf`h1*4X`jlK7)2S4Og&QPOB~55ePYJB2?ng#Y9DqMZ~v**$4Kw-=7=Ag@Gg6 z6KtYgF`$PxE6b4Qu$CSouxom#8*qe&z05q!#KoEpP4WR*VJ&PB1@U_=fM08G>5|oT z8lQYX4zL_{i1GvCd+RR&a@cr&n~r1kI7zehS<1lL2yfTh5DG>Q_hM{QX0$Yo<$2@9 zSeRzsc^_ALVu3wWTS>*eWEX8BQ*#QKSR`r+YGQ}T{Z}nix08z7D#-2aq@=jZw6ORg csbs`!&0vQpCn$$%JE^)a*nQaro^2b_J_gjdGXMYp From aac5d4390a9a0a2097e4713d842a525236c6534c Mon Sep 17 00:00:00 2001 From: A-Baji Date: Tue, 1 Mar 2022 17:32:23 -0600 Subject: [PATCH 17/24] undo linux binary bump --- distribution/mexa64/mym.mexa64 | Bin 52856 -> 52856 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/distribution/mexa64/mym.mexa64 b/distribution/mexa64/mym.mexa64 index 3e203ff42fbda64038e55a6d6f2bc043c5229ba7..27c23df7b3aaf4f31f1620992fea860a59095e0f 100755 GIT binary patch delta 709 zcmZ{iO=uHQ5Xax_7L!L5cX2@81~DrDbEmC1kN$pb;YRj!*;z7Y9B6vmtsh;rqv*Z;lA6(Sd3fu+HZ=L>V~xwD7o zAHBSk{QPUWf8`tggauHTBUv#p*quYE2z#PA05SZn9|Z#wh6PDH&;4<93`;#1Aw=Pw zm(r_ILMF%zJ}|6AL1b?w=P4mFNpc=r3EvoIVp%+$AK15SI*2aYF;2(gU++$m{Qd5d zH2RXi_dfbgs0hoXv?yF;v(qpG*V%;|vl7Vc;o`qIQHYWwQ8#;b(yyac%O_O)6H+5Mj9`-r;V`6*F7XTi%pWf!>bSuN9 zPU|Yq!1@u^YxN+Zq{ILsY{-NFF^JFF&rTfULu`G>(4iJohp2wE=|B%?fJIJmBcM2z zIdueeu+J$RzKiOnO~Y0SD{k5n{kwBm{$x{E{E&-%PM#nS)t;?}3l}b8jyXL``U7co BxK#iE delta 790 zcmZ{iL1+_E5Qg9E7Lz3kU7GABLbBT+v?;V9r`#l9(Jg{;y_o2s!BYga5i06IXb~?K zY2%!fCTTFm;4QvO1&hH7rWnCo#9lAr<}a1Jwk^ZuQAv-5UW<=s_z zWnt7Ru>-S8=07oW#L0gtR`t=m5aor)jRnaO6^c7={#$87h&J#Q82;4Ojmt}8&t5-z zIDT^c$?~_~e?I@fUvLeAJS!PKi153|q8`tQ^o5x-Gw1kI|0M{Ic$_vsL1Mt_He-G# z#UiL`21GGIehO{PP*bEHrqlV@V=rSv>?|&7M&hE#-a39&VN7OGQPZ89qz9IoaN>FF zXgXy0Pi@LK{PCX2tOw0`ssG8k|IWL`<59mCLVS7xPQffceSKO2i7(AL9 z`9zPSf`h1*4X`jlK7)2S4Og&QPOB~55ePYJB2?ng#Y9DqMZ~v**$4Kw-=7=Ag@Gg6 z6KtYgF`$PxE6b4Qu$CSouxom#8*qe&z05q!#KoEpP4WR*VJ&PB1@U_=fM08G>5|oT z8lQYX4zL_{i1GvCd+RR&a@cr&n~r1kI7zehS<1lL2yfTh5DG>Q_hM{QX0$Yo<$2@9 zSeRzsc^_ALVu3wWTS>*eWEX8BQ*#QKSR`r+YGQ}T{Z}nix08z7D#-2aq@=jZw6ORg csbs`!&0vQpCn$$%JE^)a*nQaro^2b_J_gjdGXMYp From 8db96e1fbbcc9af5ff5701167175471fae73c284 Mon Sep 17 00:00:00 2001 From: A-Baji Date: Tue, 1 Mar 2022 17:38:50 -0600 Subject: [PATCH 18/24] update linux binary --- distribution/mexa64/mym.mexa64 | Bin 52856 -> 52856 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/distribution/mexa64/mym.mexa64 b/distribution/mexa64/mym.mexa64 index 27c23df7b3aaf4f31f1620992fea860a59095e0f..f58731be9bd24b1d36d52dc28fb186f483507290 100755 GIT binary patch delta 776 zcmZ`%O=uHQ5T4l$CQB5$G}$CVvfCg?duYfh1U&TM&lbVBdN9$0!BYgGkyfe)p+&@_ zjdPPGX&}YmEq#|Ni17!SVgz%u9t3X@^paCSXq>9$eEygl|5|B8rb<#&k|NKS6<1WQ?7jVOrfn(OrdMc&a_`P>of&@H$=Xk@ zW?yH2-&j1iOuz6BMnyp}gP0HxP9**QQ@Jbi7v?XC=b`HupY*$BkevbuEe9avh9E(@ zVPcZfjI-nzras5&2|it#eii`m!9`j%%=9%Gy?64q2B1Px=Jfhz>7mWdxc)NrjR@w& zPh&PX@%f(%|x5hjCpcu zIlM)UT2AjqT!EBBhp?W)0j2Aa>4dyH?sjZ{Mx%wXUl{}2f#eoBbrXklxBe7M0ylC# zCQdUF8-!iqQB=VX7OgfT*kKH-8g!}6EJ{C`Vfx;D&yQ?ua>I;aH4H`SGb@dmIN01m zEK>W$G9OR3QY<}yua#_zMIj!Qc>aTW)#gEpG}od87(jOGf#bHMahb!_cFS- Nv)(S3MWJUZe*rtUvTy(Z delta 695 zcmZ{iJ%|%g5Xax_29qU+qVZ-IK>RVng4t9hBrHF^3Iy< zEzeeJY|kpSnFI0kp&;L>HmzA-hN!Wy(8%;f2x-O;`rA%4kji|8&Y_I{7EdEwst{%`oM3--yXX1(P_h(q)VSh=Q zd@DTo82cbpjAzq&3@-CabCKJ4V>O3`nx`BVRTZ~uHdIin+u-8adJ(STO1-G{tw10i zz@PmMO~Y1LpGR)Ln41le7F4)z{BpdyHw6}vLr2cu2TlqkMTig07*41 z1`y$m%os3}`Mmr5)Cn45^HWwC>p^vl+Gj@@83B#3M3gWCN??_!C#Z)*qHy>=Y8#Fc nwo-X%!;zHzEyL;;M{&iUxHu&81bL_p94%b2aP{)MJg}vI>ua;w From 4792dbe76dc0cbddd6d2ed9947d02798b2e75f19 Mon Sep 17 00:00:00 2001 From: A-Baji Date: Thu, 3 Mar 2022 11:19:38 -0600 Subject: [PATCH 19/24] formatting --- tests/TestExternal.m | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tests/TestExternal.m b/tests/TestExternal.m index dab3590..b09e7fd 100644 --- a/tests/TestExternal.m +++ b/tests/TestExternal.m @@ -94,7 +94,13 @@ function TestExternal_test32BitRead(testCase) st = dbstack; disp(['---------------' st(1).name '---------------']); % https://github.com/datajoint/mym/issues/86 - value = ['6D596D00530200000001000000010000000400000068697473007369646573007461736B73007374616765004D000000410200000001000000070000000600000000000000000000000000F8FF000000000000F03F000000000000F03F0000000000000000000000000000F03F0000000000000000000000000000F8FF230000004102000000010000000700000004000000000000006C006C006C006C00720072006C002300000041020000000100000007000000040000000000000064006400640064006400640064002500000041020000000100000008000000040000000000000053007400610067006500200031003000']; + value = ['6D596D005302000000010000000100000004000000686974730073696465730074' ... + '61736B73007374616765004D00000041020000000100000007000000060000000000000' ... + '0000000000000F8FF000000000000F03F000000000000F03F0000000000000000000000' ... + '000000F03F0000000000000000000000000000F8FF23000000410200000001000000070' ... + '0000004000000000000006C006C006C006C00720072006C002300000041020000000100' ... + '00000700000004000000000000006400640064006400640064006400250000004102000' ... + '0000100000008000000040000000000000053007400610067006500200031003000']; hexstring = value'; reshapedString = reshape(hexstring,2,length(value)/2); hexMtx = reshapedString.'; From 55b21650205dc520944b73856849bc5f8a453473 Mon Sep 17 00:00:00 2001 From: guzman-raphael Date: Thu, 3 Mar 2022 14:21:07 -0600 Subject: [PATCH 20/24] Add WIN64 mex. --- distribution/mexw64/mym.mexw64 | Bin 84480 -> 86016 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/distribution/mexw64/mym.mexw64 b/distribution/mexw64/mym.mexw64 index c884c79e7704a0ed06ae3dc2a1780b0446093d3b..26572ef4849ba13657772a0e8924d1ad7a034eaa 100644 GIT binary patch delta 20600 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 LgL7r^1@Zp?rZknR delta 18846 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∨6-j6uqJo{&N%eux8#X3 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 Date: Mon, 7 Mar 2022 11:34:07 -0600 Subject: [PATCH 21/24] Update function, version, and binary --- distribution/mexa64/mym.mexa64 | Bin 52856 -> 52856 bytes src/mym.cpp | 5 +---- src/mym.h | 2 +- 3 files changed, 2 insertions(+), 5 deletions(-) diff --git a/distribution/mexa64/mym.mexa64 b/distribution/mexa64/mym.mexa64 index f58731be9bd24b1d36d52dc28fb186f483507290..ad405c7893e9a8c60eb6562ba8455fdbd6c78160 100755 GIT binary patch delta 670 zcmYL{PiRv?5XN`kOEtktUnH#!6_QA3l!}Q5iT0ouk$6ik5=A6hMSBq2Q|qazCnf)0 zG9U|4{vWUTsNhWUq5jh@U-|>pe%i zU^z0cA8EwB^%qP~w_)a8Uad+UrQ9V&A>dZ5cbz@XJk?^Nmmvmu3u&oG|=Q=qX+ zh{`N;9KKm$UIE1%^QO(m%uWrv=aCPNfhn6$nN6?;)@=V7a|>*NeqD&jbJPRlFPYPz zsgS3Ot6~#I6M@Pr6m|$z5WLIHs2x-7co|ulVAl*gYULb z7>sYDVK7b0*&!LDui22-DB}#2{x`0{xP%#_K<%?HeyB1GpD^1&n+xA~CS04v}#+keFT9c+MJ zRfy0N)JwsLJ!MXVWebVmC$I*ZFHpEih#J@hYO~A{F!Yi+33gSOO?!PF`8Ho6uNjRj zFvma>OoP=8)CFVT&@g!G2XhZDWDlxly)sIlvwqo0daeU@cWzMDsF?FhFU>(4w4Mtf zqUZh6N#T4z)+v$qC}N6k=TFKsEhDr>n_COr1=}8g)@iihmm1B$F4KC!BTbTqM^?yZ z1fc!UB;9~EXvR3!KD);&T&|X#nt?YxjMffdVoT9ZK3cT98G!AiQRpzuLD6^7Bcqn1 z)Vqs@rDjFOotje3P|w~rRTqnNZMs8omu%OXm{wF=anc--RcqhlluyR!?n=P%|7*Ql Z2|5L0P~{Ph3; diff --git a/src/mym.cpp b/src/mym.cpp index fc84d7c..8585380 100644 --- a/src/mym.cpp +++ b/src/mym.cpp @@ -364,10 +364,7 @@ static void updateplugindir() { * Return true/false based on USE_32_BIT_DIMS flag **********************************************************************/ static bool use32bitdims() { - if (getenv("USE_32BIT_DIMS")) - return strcasecmp(getenv("USE_32BIT_DIMS"), "true") == 0; - else - return false; + return getenv("USE_32BIT_DIMS") && strcasecmp(getenv("USE_32BIT_DIMS"), "true") == 0; } /********************************************************************** * mysql(): Execute the actual action diff --git a/src/mym.h b/src/mym.h index 753f63c..a237b2b 100644 --- a/src/mym.h +++ b/src/mym.h @@ -34,7 +34,7 @@ // mym version information #define MYM_VERSION_MAJOR 2 #define MYM_VERSION_MINOR 8 -#define MYM_VERSION_BUGFIX 3 +#define MYM_VERSION_BUGFIX 4 // some local defintion From 2418752bd127bf79a38cd55d318168c46b82e2ca Mon Sep 17 00:00:00 2001 From: guzman-raphael Date: Wed, 9 Mar 2022 08:09:23 -0600 Subject: [PATCH 22/24] Add MYM_ prefix to env var, bump version, bump nginx, update LNX x64 binary. --- LNX-docker-compose.yml | 2 +- distribution/mexa64/mym.mexa64 | Bin 52856 -> 52856 bytes local-docker-compose.yml | 2 +- src/mym.cpp | 6 +++--- src/mym.h | 2 +- tests/TestExternal.m | 4 ++-- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/LNX-docker-compose.yml b/LNX-docker-compose.yml index 4185fbc..1d5451a 100644 --- a/LNX-docker-compose.yml +++ b/LNX-docker-compose.yml @@ -11,7 +11,7 @@ services: - MYSQL_ROOT_PASSWORD=simple fakeservices.datajoint.io: <<: *net - image: datajoint/nginx:v0.0.16 + image: datajoint/nginx:v0.1.1 environment: - ADD_db_TYPE=DATABASE - ADD_db_ENDPOINT=db:3306 diff --git a/distribution/mexa64/mym.mexa64 b/distribution/mexa64/mym.mexa64 index ad405c7893e9a8c60eb6562ba8455fdbd6c78160..777761ad64c6aff68570684ed3192957114d22be 100755 GIT binary patch delta 1772 zcmX|Cdr(w$6uxH{bx~|#6KHjL$wNdCmqeo=8Deq4MUa<*lOX0Jd8)gxq9BIYY|A#; zu?ABdOGmJju%G$Ja!?7x$$Xoms5oj|o*Je3VBF5V*Z605f8Y7ecfNCe=iYs~L;iG! zyy-fO3v=0ec7N1%b7y1ArJjNFv$^b4p7lYjD|j)jdxa~QSW|F2Kq{6^&4<0%HMJ9} z*_qHDP-P`^oWb%^+ssD~+UZw794p6jWK#U$?o5S55RCYbb z=`Ft#p57zkpR(^GA^{3m-`mA9rCG;u6x;Tv7`w#sqM87rP&4Z`6yb|mE5MO`5Z&bf z;mn|$C4~?;ljB?YEvl3@yVn>kxe-clwd8dq@*QSoaC-f6QbU)qP2?QXf*Ch(m){o zLL7I2bNQ;IFxPLGGYb2YDneY|B*4;2eSCb`ZXZ-S>uRang@m4Xo#VKpKp%WQg$Nyw zwaMl%4Go0vx@fm|YhK#z%RVDBt3#v?HeQiBI7V4*x+Wo)8cAa@^ZY?EJ(w!lqUy0I zWh&I+&J>MrjR1+o-y%H6lcN&Ag@JiYg==?l=i?=+8~`UYzPed& z8}S$qrcZzdJeTePD(p=U0XI}GHi=6K;B{Kwuurf0MB3XT=6S$tFgjma9thncq#HG&PXJ@h+ zPgOvqoZp7RD7h&wD8(CyM&x$a9{Lf(jeJe%*~bd|PGZ_ynk z-~#@gU!~YfbaI)^Dhfu)Mow_yxML>BHFVY$ytY7`$0jqgbpIN&m8<;!=>wUPFFW z6cl2>>d-~+jujm0wEcYDLD8S>6=3IU2$)k9Ilvh`lwPr-!WuCcU)2VDAw`oSA_q!& zDxdiZ{}uQQ!VM9{C>basfM2^ev>4)^7JD7dJ zhJoffsAsKaH;~Ck;qA41Xg*bCwQv(P>q=k);<{wDuoF7%6W*ns3}2*{lwQ%oCSAm# zbsBhy>h<~X18!b_92ko!mw`iKW@0vrt>}=^dzg7{%o>fA);Ji)+N|yF^bfXWcURDV D0oeoE delta 1770 zcmX|CYgANK6ux@~bTnLpqcBc_@)i(;p@j-TkTN>pD98vhwo=3=f;@D11VXwHbsAVJ z+F6)Nth6O+DR!(NS2R9CG0n_pijS5hmxriWX6o{`@4d#KnK|G7_P4)%&OT?J>`*@0 zp=`biqj&cgDn~1hMJ};ynHcSJbWHo+>*=fy65L=c(`zf;U^QzF=>V98Ws`ED0lOyM zh6;8ntOqoyDI90Az0f=O_yIvM*2Wg%3H@i#%~nK=P--5S#ArW7EBmGBLAEJU>!kU| z$ZZx z1bSvN#3|q*tC^V!u#ep``hg0fNV_&RiM^5(tbjP2Z1Qz8PZ8_28*SG}_Mrfb?q-oQ99Cv7AD($elZDE zJJi)33R>5O{*7t(cFH5iS-#$*rh z!|#bRO5|L)BrDAE8{{bQUUFsVu-6E%wNoFPF9^bb+SO1`-I@t)8^v*43(yCjOCdtt zu|B0VVl-_C-*sLPx;wRk(`->1NR4jQQ=_xfA|(dYN*&zkV#)U4y0^2aO*p^rxWs-qo~kq)qwQDUcbM#H>$|7WS%^n* z4y~Dq@B_AG`e~8|O}olzfPZDa4*nRvxJz@%mn3dGNY1Y8-A)eP#GtGo=s|PVGFXbO zSw0YiomqacgTayvRm65r=?pH?7Y$4GcY@H{M)geNBv|Dp!FdFCvpbTL#7GBD#C(SV`RXy>|r?Gp2xyYY0cr^|VoKBLXhLcke( zlv|~0AUe66&nj0BRSeON%!Uqhk6?cq*Uv z68{nSbiz$hy(NbUzJYAbYA8VOwcg`qyGUEXnyE^ap%F|`6-^~uP4*)3VufSo+M~eG z#~PwpNG#fpr{wjOwBcI*pY@-Y^8;E1Cw! z@odoo$i~28Z_3+nMC^vrV}9fwGJKv|Qjd=pC#eIU zmwUid)UC^f1Gs735!lbBRVaWND?1e|a6`s$XL`Rl4lC@5;L1+gJGAuwRky1v_&*69 B{^9@t diff --git a/local-docker-compose.yml b/local-docker-compose.yml index 163afd0..cce76be 100644 --- a/local-docker-compose.yml +++ b/local-docker-compose.yml @@ -16,7 +16,7 @@ services: # - ./mysql/data:/var/lib/mysql fakeservices.datajoint.io: <<: *net - image: datajoint/nginx:v0.0.16 + image: datajoint/nginx:v0.1.1 environment: - ADD_db_TYPE=DATABASE - ADD_db_ENDPOINT=db:3306 diff --git a/src/mym.cpp b/src/mym.cpp index 8585380..9b2c848 100644 --- a/src/mym.cpp +++ b/src/mym.cpp @@ -360,11 +360,11 @@ static void updateplugindir() { } /********************************************************************** *use32bitdims(): Check if dimensions should be read as 32-bit - * Get USE_32_BIT_DIMS environment variable - * Return true/false based on USE_32_BIT_DIMS flag + * Get MYM_USE_32BIT_DIMS environment variable + * Return true/false based on MYM_USE_32BIT_DIMS flag **********************************************************************/ static bool use32bitdims() { - return getenv("USE_32BIT_DIMS") && strcasecmp(getenv("USE_32BIT_DIMS"), "true") == 0; + return getenv("MYM_USE_32BIT_DIMS") && strcasecmp(getenv("MYM_USE_32BIT_DIMS"), "true") == 0; } /********************************************************************** * mysql(): Execute the actual action diff --git a/src/mym.h b/src/mym.h index a237b2b..be652fa 100644 --- a/src/mym.h +++ b/src/mym.h @@ -34,7 +34,7 @@ // mym version information #define MYM_VERSION_MAJOR 2 #define MYM_VERSION_MINOR 8 -#define MYM_VERSION_BUGFIX 4 +#define MYM_VERSION_BUGFIX 5 // some local defintion diff --git a/tests/TestExternal.m b/tests/TestExternal.m index b09e7fd..8366949 100644 --- a/tests/TestExternal.m +++ b/tests/TestExternal.m @@ -113,9 +113,9 @@ function TestExternal_test32BitRead(testCase) data.sides = 'llllrrl'; data.hits = [NaN,1,1,0,1,0,NaN]; - setenv('USE_32BIT_DIMS', 'true'); + setenv('MYM_USE_32BIT_DIMS', 'true'); unpacked = mym('deserialize', packed); - setenv('USE_32BIT_DIMS', 'false'); + setenv('MYM_USE_32BIT_DIMS', 'false'); testCase.verifyEqual(unpacked, data); end From f93a40ad7a0e3373251d8f1d2ec5e83c69ad49d2 Mon Sep 17 00:00:00 2001 From: guzman-raphael Date: Wed, 9 Mar 2022 08:13:24 -0600 Subject: [PATCH 23/24] Update WIN x64 binary. --- distribution/mexw64/mym.mexw64 | Bin 86016 -> 86016 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/distribution/mexw64/mym.mexw64 b/distribution/mexw64/mym.mexw64 index 26572ef4849ba13657772a0e8924d1ad7a034eaa..acf45127aaa2d5d83421c2a153d79f06395c43dc 100644 GIT binary patch delta 14375 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 CZTfQn delta 14464 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 H=z99!TxcGt From 5816c0fc86f19ac2d11b4b906ab5ae049fc67505 Mon Sep 17 00:00:00 2001 From: guzman-raphael Date: Wed, 9 Mar 2022 06:46:55 -0800 Subject: [PATCH 24/24] Update MACOS x64 binary. --- distribution/mexmaci64/mym.mexmaci64 | Bin 45604 -> 49788 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/distribution/mexmaci64/mym.mexmaci64 b/distribution/mexmaci64/mym.mexmaci64 index 8fc0511928282628101fc72e66aa96ce468a4ff7..62c02085987f33f95bdf88f605a57aff82af55b1 100755 GIT binary patch delta 21667 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 Y3>{LAU2@K{ocne~{4GF@fyC$k0dQR}WdHyG delta 19118 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