casadi-bindings-internal 0.1.5.0 → 0.1.6.0
raw patch · 5 files changed
+53/−29 lines, 5 files
Files
- casadi-bindings-internal.cabal +1/−1
- cbits/hs_tools.cpp +11/−9
- src/Casadi/Internal/CToolsImports.hs +18/−8
- src/Casadi/Internal/Marshal.hs +13/−6
- src/Casadi/Internal/WrapReturn.hs +10/−5
casadi-bindings-internal.cabal view
@@ -1,5 +1,5 @@ name: casadi-bindings-internal-version: 0.1.5.0+version: 0.1.6.0 license: LGPL-3 license-file: LICENSE category: Numerical, Math
cbits/hs_tools.cpp view
@@ -42,20 +42,20 @@ delete pair; } -extern "C" std::pair<int,int> * hs_new_stdpair_int(int x, int y);-std::pair<int,int> * hs_new_stdpair_int(int x, int y) {- return new std::pair<int,int>(x, y);+extern "C" std::pair<long long,long long> * hs_new_stdpair_long_long(long long x, long long y);+std::pair<long long,long long> * hs_new_stdpair_long_long(long long x, long long y) {+ return new std::pair<long long,long long>(x, y); }-extern "C" int hs_stdpair_fst_int(std::pair<int,int> * stdpair);-int hs_stdpair_fst_int(std::pair<int,int> * stdpair) {+extern "C" long long hs_stdpair_fst_long_long(std::pair<long long,long long> * stdpair);+long long hs_stdpair_fst_long_long(std::pair<long long,long long> * stdpair) { return stdpair->first; }-extern "C" int hs_stdpair_snd_int(std::pair<int,int> * stdpair);-int hs_stdpair_snd_int(std::pair<int,int> * stdpair) {+extern "C" long long hs_stdpair_snd_long_long(std::pair<long long,long long> * stdpair);+long long hs_stdpair_snd_long_long(std::pair<long long,long long> * stdpair) { return stdpair->second; }-extern "C" void hs_delete_stdpair_int(std::pair<int,int> * pair);-void hs_delete_stdpair_int(std::pair<int,int> * pair){+extern "C" void hs_delete_stdpair_long_long(std::pair<long long,long long> * pair);+void hs_delete_stdpair_long_long(std::pair<long long,long long> * pair){ delete pair; } @@ -133,6 +133,8 @@ int hs_size_vec_##name(vector<type> * vec){ return vec->size(); } WRITE_STUFF(int,int)+typedef long long longlong;+WRITE_STUFF(llong,longlong) WRITE_STUFF(voidp, void*) WRITE_STUFF(uchar, unsigned char) WRITE_STUFF(double, double)
src/Casadi/Internal/CToolsImports.hs view
@@ -18,14 +18,14 @@ foreign import ccall unsafe "hs_delete_stdpair" c_deleteStdPair :: Ptr (StdPair (Ptr a) (Ptr b)) -> IO () -foreign import ccall unsafe "hs_new_stdpair_int" c_newStdPairInt- :: CInt -> CInt -> IO (Ptr (StdPair CInt CInt))-foreign import ccall unsafe "hs_stdpair_fst_int" c_stdPairFstInt- :: Ptr (StdPair CInt CInt) -> IO CInt-foreign import ccall unsafe "hs_stdpair_snd_int" c_stdPairSndInt- :: Ptr (StdPair CInt CInt) -> IO CInt-foreign import ccall unsafe "hs_delete_stdpair_int" c_deleteStdPairInt- :: Ptr (StdPair CInt CInt) -> IO ()+foreign import ccall unsafe "hs_new_stdpair_long_long" c_newStdPairLLong+ :: CLLong -> CLLong -> IO (Ptr (StdPair CLLong CLLong))+foreign import ccall unsafe "hs_stdpair_fst_long_long" c_stdPairFstLLong+ :: Ptr (StdPair CLLong CLLong) -> IO CLLong+foreign import ccall unsafe "hs_stdpair_snd_long_long" c_stdPairSndLLong+ :: Ptr (StdPair CLLong CLLong) -> IO CLLong+foreign import ccall unsafe "hs_delete_stdpair_long_long" c_deleteStdPairLLong+ :: Ptr (StdPair CLLong CLLong) -> IO () --------------------------- stdmap ----------------------------------- foreign import ccall unsafe "hs_new_dict" c_newDict@@ -52,6 +52,16 @@ :: Ptr (StdVec CInt) -> Ptr CInt -> IO () foreign import ccall unsafe "hs_size_vec_int" c_sizeVecCInt :: Ptr (StdVec CInt) -> IO CInt+++foreign import ccall unsafe "hs_new_vec_llong" c_newVecLLong+ :: Ptr CLLong -> CInt -> IO (Ptr (StdVec CLLong))+foreign import ccall unsafe "hs_delete_vec_llong" c_deleteVecLLong+ :: Ptr (StdVec CLLong) -> IO ()+foreign import ccall unsafe "hs_copy_vec_llong" c_copyVecCLLong+ :: Ptr (StdVec CLLong) -> Ptr CLLong -> IO ()+foreign import ccall unsafe "hs_size_vec_llong" c_sizeVecCLLong+ :: Ptr (StdVec CLLong) -> IO CInt --------------------------- ("voidp","VoidP",Just "(Ptr a)",[]) ----------------------------------- foreign import ccall unsafe "hs_new_vec_voidp" c_newVecVoidP
src/Casadi/Internal/Marshal.hs view
@@ -46,6 +46,8 @@ hsToC = fromIntegral -- really should check min/max bounds here instance HsToC Int CLong where hsToC = fromIntegral+instance HsToC Int CLLong where+ hsToC = fromIntegral instance HsToC Bool CInt where hsToC False = 0 hsToC True = 1@@ -60,6 +62,8 @@ marshal = return . hsToC instance Marshal Int CLong where marshal = return . hsToC+instance Marshal Int CLLong where+ marshal = return . hsToC instance Marshal Bool CInt where marshal = return . hsToC instance Marshal Double CDouble where@@ -76,6 +80,9 @@ instance Marshal (V.Vector Int) (Ptr (StdVec CInt)) where marshal = newStorableVec c_newVecCInt . (V.map hsToC) marshalFree = const c_deleteVecCInt+instance Marshal (V.Vector Int) (Ptr (StdVec CLLong)) where+ marshal = newStorableVec c_newVecLLong . V.map hsToC+ marshalFree = const c_deleteVecLLong instance Marshal (V.Vector Bool) (Ptr (StdVec CInt)) where marshal = newStorableVec c_newVecCInt . (V.map hsToC) marshalFree = const c_deleteVecCInt@@ -113,18 +120,18 @@ c_deleteStdPair stdpair -- stdpair-instance (Marshal a CInt, Marshal b CInt)- => Marshal (a, b) (Ptr (StdPair CInt CInt)) where+instance (Marshal a CLLong, Marshal b CLLong)+ => Marshal (a, b) (Ptr (StdPair CLLong CLLong)) where marshal (x,y) = do px <- marshal x py <- marshal y- c_newStdPairInt px py+ c_newStdPairLLong px py marshalFree (x,y) stdpair = do- cx <- c_stdPairFstInt stdpair- cy <- c_stdPairSndInt stdpair+ cx <- c_stdPairFstLLong stdpair+ cy <- c_stdPairSndLLong stdpair marshalFree x cx marshalFree y cy- c_deleteStdPairInt stdpair+ c_deleteStdPairLLong stdpair -- stdmap instance (Marshal a (Ptr pa))
src/Casadi/Internal/WrapReturn.hs view
@@ -31,6 +31,8 @@ wrapReturn = return . realToFrac instance WrapReturn CLong Int where wrapReturn = return . fromIntegral+instance WrapReturn CLLong Int where+ wrapReturn = return . fromIntegral instance WrapReturn CInt Bool where wrapReturn 0 = return False wrapReturn _ = return True@@ -66,14 +68,14 @@ c_deleteStdPair stdPair return (x, y) -instance (WrapReturn CInt a, WrapReturn CInt b)- => WrapReturn (Ptr (StdPair CInt CInt)) (a, b) where+instance (WrapReturn CLLong a, WrapReturn CLLong b)+ => WrapReturn (Ptr (StdPair CLLong CLLong)) (a, b) where wrapReturn stdPair = do- px <- c_stdPairFstInt stdPair- py <- c_stdPairSndInt stdPair+ px <- c_stdPairFstLLong stdPair+ py <- c_stdPairSndLLong stdPair x <- wrapReturn px y <- wrapReturn py- c_deleteStdPairInt stdPair+ c_deleteStdPairLLong stdPair return (x, y) @@ -108,6 +110,9 @@ free arr vecDel vecPtr fmap V.fromList (mapM cToHs ret)++instance WrapReturn (Ptr (StdVec CLLong)) (V.Vector Int) where+ wrapReturn = wrapReturnVec c_sizeVecCLLong c_copyVecCLLong c_deleteVecLLong wrapReturn instance WrapReturn (Ptr (StdVec CInt)) (V.Vector Int) where wrapReturn = wrapReturnVec c_sizeVecCInt c_copyVecCInt c_deleteVecCInt wrapReturn