add part function 52/1852/2
antoine ELIAS [Wed, 8 Sep 2010 15:21:57 +0000 (17:21 +0200)]
Change-Id: Ia3089a2da1bf284dd58dd54f091afc342eb6dc9b

12 files changed:
scilab/modules/string/Makefile.am
scilab/modules/string/Makefile.in
scilab/modules/string/includes/gw_string.h
scilab/modules/string/includes/string_gw.hxx
scilab/modules/string/sci_gateway/c/gw_string.c
scilab/modules/string/sci_gateway/c/sci_part.c [deleted file]
scilab/modules/string/sci_gateway/cpp/sci_part.cpp [new file with mode: 0644]
scilab/modules/string/sci_gateway/cpp/string_gw.cpp
scilab/modules/string/sci_gateway/cpp/string_gw.vcproj
scilab/modules/string/src/c/partfunction.c
scilab/modules/string/src/c/partfunction.h
scilab/modules/string/src/c/string.vcproj

index a1ec48d..98450d3 100644 (file)
@@ -37,7 +37,6 @@ sci_gateway/c/sci_code2str.c \
 sci_gateway/c/sci_convstr.c \
 sci_gateway/c/sci_emptystr.c \
 sci_gateway/c/sci_length.c \
-sci_gateway/c/sci_part.c \
 sci_gateway/c/sci_str2code.c \
 sci_gateway/c/sci_strcat.c \
 sci_gateway/c/sci_strindex.c \
@@ -61,10 +60,11 @@ sci_gateway/c/sci_strtod.c \
 sci_gateway/c/sci_strtok.c
 
 GATEWAY_CPP_SOURCES = \
-    sci_gateway/cpp/sci_stripblanks.cpp \
+       sci_gateway/cpp/sci_stripblanks.cpp \
        sci_gateway/cpp/sci_grep.cpp \
        sci_gateway/cpp/string_gw.cpp \
-       sci_gateway/cpp/sci_regexp.cpp
+       sci_gateway/cpp/sci_regexp.cpp \
+       sci_gateway/cpp/sci_part.cpp
 
 GATEWAY_FORTRAN_SOURCES =  sci_gateway/fortran/sci_string.f \
 sci_gateway/fortran/strops.f
index 69e9dc9..49be8db 100644 (file)
@@ -135,10 +135,9 @@ am__objects_3 =
 am__objects_4 = libscistring_la-gw_string.lo \
        libscistring_la-sci_ascii.lo libscistring_la-sci_code2str.lo \
        libscistring_la-sci_convstr.lo libscistring_la-sci_emptystr.lo \
-       libscistring_la-sci_length.lo libscistring_la-sci_part.lo \
-       libscistring_la-sci_str2code.lo libscistring_la-sci_strcat.lo \
-       libscistring_la-sci_strindex.lo libscistring_la-sci_string.lo \
-       libscistring_la-sci_strsplit.lo \
+       libscistring_la-sci_length.lo libscistring_la-sci_str2code.lo \
+       libscistring_la-sci_strcat.lo libscistring_la-sci_strindex.lo \
+       libscistring_la-sci_string.lo libscistring_la-sci_strsplit.lo \
        libscistring_la-sci_strsubst.lo libscistring_la-sci_tokens.lo \
        libscistring_la-sci_strcmp.lo libscistring_la-sci_isletter.lo \
        libscistring_la-sci_isdigit.lo \
@@ -151,7 +150,7 @@ am__objects_4 = libscistring_la-gw_string.lo \
 am__objects_5 = sci_string.lo strops.lo
 am__objects_6 = libscistring_la-sci_stripblanks.lo \
        libscistring_la-sci_grep.lo libscistring_la-string_gw.lo \
-       libscistring_la-sci_regexp.lo
+       libscistring_la-sci_regexp.lo libscistring_la-sci_part.lo
 am_libscistring_la_OBJECTS = $(am__objects_1) $(am__objects_2) \
        $(am__objects_3) $(am__objects_4) $(am__objects_5) \
        $(am__objects_6)
@@ -477,7 +476,6 @@ sci_gateway/c/sci_code2str.c \
 sci_gateway/c/sci_convstr.c \
 sci_gateway/c/sci_emptystr.c \
 sci_gateway/c/sci_length.c \
-sci_gateway/c/sci_part.c \
 sci_gateway/c/sci_str2code.c \
 sci_gateway/c/sci_strcat.c \
 sci_gateway/c/sci_strindex.c \
@@ -501,10 +499,11 @@ sci_gateway/c/sci_strtod.c \
 sci_gateway/c/sci_strtok.c
 
 GATEWAY_CPP_SOURCES = \
-    sci_gateway/cpp/sci_stripblanks.cpp \
+       sci_gateway/cpp/sci_stripblanks.cpp \
        sci_gateway/cpp/sci_grep.cpp \
        sci_gateway/cpp/string_gw.cpp \
-       sci_gateway/cpp/sci_regexp.cpp
+       sci_gateway/cpp/sci_regexp.cpp \
+       sci_gateway/cpp/sci_part.cpp
 
 GATEWAY_FORTRAN_SOURCES = sci_gateway/fortran/sci_string.f \
 sci_gateway/fortran/strops.f
@@ -979,13 +978,6 @@ libscistring_la-sci_length.lo: sci_gateway/c/sci_length.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscistring_la_CPPFLAGS) $(CPPFLAGS) $(libscistring_la_CFLAGS) $(CFLAGS) -c -o libscistring_la-sci_length.lo `test -f 'sci_gateway/c/sci_length.c' || echo '$(srcdir)/'`sci_gateway/c/sci_length.c
 
-libscistring_la-sci_part.lo: sci_gateway/c/sci_part.c
-@am__fastdepCC_TRUE@   $(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscistring_la_CPPFLAGS) $(CPPFLAGS) $(libscistring_la_CFLAGS) $(CFLAGS) -MT libscistring_la-sci_part.lo -MD -MP -MF $(DEPDIR)/libscistring_la-sci_part.Tpo -c -o libscistring_la-sci_part.lo `test -f 'sci_gateway/c/sci_part.c' || echo '$(srcdir)/'`sci_gateway/c/sci_part.c
-@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/libscistring_la-sci_part.Tpo $(DEPDIR)/libscistring_la-sci_part.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='sci_gateway/c/sci_part.c' object='libscistring_la-sci_part.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscistring_la_CPPFLAGS) $(CPPFLAGS) $(libscistring_la_CFLAGS) $(CFLAGS) -c -o libscistring_la-sci_part.lo `test -f 'sci_gateway/c/sci_part.c' || echo '$(srcdir)/'`sci_gateway/c/sci_part.c
-
 libscistring_la-sci_str2code.lo: sci_gateway/c/sci_str2code.c
 @am__fastdepCC_TRUE@   $(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscistring_la_CPPFLAGS) $(CPPFLAGS) $(libscistring_la_CFLAGS) $(CFLAGS) -MT libscistring_la-sci_str2code.lo -MD -MP -MF $(DEPDIR)/libscistring_la-sci_str2code.Tpo -c -o libscistring_la-sci_str2code.lo `test -f 'sci_gateway/c/sci_str2code.c' || echo '$(srcdir)/'`sci_gateway/c/sci_str2code.c
 @am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/libscistring_la-sci_str2code.Tpo $(DEPDIR)/libscistring_la-sci_str2code.Plo
@@ -1189,6 +1181,13 @@ libscistring_la-sci_regexp.lo: sci_gateway/cpp/sci_regexp.cpp
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@ $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscistring_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libscistring_la-sci_regexp.lo `test -f 'sci_gateway/cpp/sci_regexp.cpp' || echo '$(srcdir)/'`sci_gateway/cpp/sci_regexp.cpp
 
+libscistring_la-sci_part.lo: sci_gateway/cpp/sci_part.cpp
+@am__fastdepCXX_TRUE@  $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscistring_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libscistring_la-sci_part.lo -MD -MP -MF $(DEPDIR)/libscistring_la-sci_part.Tpo -c -o libscistring_la-sci_part.lo `test -f 'sci_gateway/cpp/sci_part.cpp' || echo '$(srcdir)/'`sci_gateway/cpp/sci_part.cpp
+@am__fastdepCXX_TRUE@  $(am__mv) $(DEPDIR)/libscistring_la-sci_part.Tpo $(DEPDIR)/libscistring_la-sci_part.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='sci_gateway/cpp/sci_part.cpp' object='libscistring_la-sci_part.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscistring_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libscistring_la-sci_part.lo `test -f 'sci_gateway/cpp/sci_part.cpp' || echo '$(srcdir)/'`sci_gateway/cpp/sci_part.cpp
+
 .f.o:
        $(F77COMPILE) -c -o $@ $<
 
index fa8ae26..a55929e 100644 (file)
@@ -20,7 +20,6 @@
 STRING_IMPEXP int gw_string(void);
 /*--------------------------------------------------------------------------*/ 
 //STRING_IMPEXP int sci_length(char *fname,unsigned long fname_len);
-STRING_IMPEXP int sci_part(char *fname,unsigned long fname_len);
 STRING_IMPEXP int sci_string(char *fname,unsigned long fname_len);
 STRING_IMPEXP int sci_convstr(char *fname,unsigned long fname_len);
 STRING_IMPEXP int sci_emptystr(char *fname,unsigned long fname_len);
index d97b278..27ef104 100644 (file)
@@ -30,6 +30,7 @@ public :
 CPP_GATEWAY_PROTOTYPE(sci_grep);
 CPP_GATEWAY_PROTOTYPE(sci_stripblanks);
 CPP_GATEWAY_PROTOTYPE(sci_regexp);
+CPP_GATEWAY_PROTOTYPE(sci_part);
 
 
 #endif /* !__STRING_GW_HXX__ */
index a490b61..50ac938 100644 (file)
@@ -20,7 +20,7 @@
 static gw_generic_table Tab[] =
 {
        {NULL, ""}, //length
-       {sci_part,"part"},
+       {NULL, ""}, //part
        {sci_string,"string"},
        {sci_convstr,"convstr"},
        {sci_emptystr,"emptystr"},
diff --git a/scilab/modules/string/sci_gateway/c/sci_part.c b/scilab/modules/string/sci_gateway/c/sci_part.c
deleted file mode 100644 (file)
index 1b88d6f..0000000
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
- * Copyright (C) INRIA - Allan CORNET , Cong WU
- * 
- * This file must be used under the terms of the CeCILL.
- * This source file is licensed as described in the file COPYING, which
- * you should have received as part of this distribution.  The terms
- * are also available at    
- * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
- *
- */
-
-/* desc : Let  s[k]  stands for the  k  character of Input_StringMatrixings
-  ( or the  white space character if  k >length(s) ).
-  part  returns  c , a matrix of character Input_StringMatrixings, such that  
-  c(i,j)  is the Input_StringMatrixing  "s[v(1)]...s[v(n)]"  (  s=mp(i,j)  ).
-                                                                          */
-/*------------------------------------------------------------------------*/
-#include <string.h>
-#include <stdio.h>
-#include "gw_string.h"
-#include "stack-c.h"
-#include "Scierror.h"
-#include "MALLOC.h"
-#include "localization.h"
-#include "freeArrayOfString.h"
-#include "partfunction.h"
-/*--------------------------------------------------------------------------*/
-int sci_part(char *fname,unsigned long fname_len)
-{
-       int i = 0;
-
-       int m1 = 0, n1 = 0;
-       char **Input_StringMatrix = NULL;
-       int m1n1 = 0; /* m1 * n1 */
-
-       int m2 = 0, n2 = 0;
-       int StackPosTwo = 0;
-       int *SecondParamaterValue = NULL;
-       int m2n2 = 0; /* m2 * n2 */
-       
-       char **Output_StringMatrix = NULL;
-
-       CheckRhs(2,2);
-       CheckLhs(1,1);
-
-       if (VarType(1) == sci_matrix) 
-       { 
-               /*Check for an empty matrix */
-               GetRhsVar(1,MATRIX_OF_DOUBLE_DATATYPE,&m1,&n1,&StackPosTwo);
-               if (m1 * n1 == 0) 
-               {
-                       LhsVar(1) = 1 ;
-                       C2F(putlhsvar)();
-                       return 0;
-               }
-    }
-       if (VarType(1) != sci_strings)
-       {
-               OverLoad(1);
-               /*Scierror(999,_("%s: Wrong type for first input argument: String expected.\n"),fname);*/
-               return 0;
-       }
-
-       if (VarType(2) != sci_matrix)
-    {
-               OverLoad(2);
-               /*Scierror(999,_("%s: Wrong type for second input argument: Matrix expected.\n"),fname);*/
-               return 0;
-    }
-
-       GetRhsVar(1,MATRIX_OF_STRING_DATATYPE,&m1,&n1,&Input_StringMatrix);
-       m1n1 = m1 * n1;
-       
-       GetRhsVar(2,MATRIX_OF_INTEGER_DATATYPE,&m2,&n2,&StackPosTwo);
-
-       if ( (m2 == n2) && (n2 == 0) )
-    {
-               /* part('something',[]) */
-               freeArrayOfString(Input_StringMatrix,m1n1);
-               CreateVarFromPtr(Rhs+1, MATRIX_OF_STRING_DATATYPE, &m1, &n1, NULL);
-               LhsVar(1)=Rhs+1;
-               C2F(putlhsvar)();
-               return 0;
-       }
-       
-       if ( !( (m2 == 1 && n2 > 0) || (m2 > 0 && n2 == 1) ) )
-       {
-               freeArrayOfString(Input_StringMatrix,m1n1);
-               Scierror(89,_("%s: Wrong size for input argument #%d.\n"),fname,2);
-               return 0;
-       }
-
-       m2n2 = m2 * n2;
-       SecondParamaterValue = istk(StackPosTwo);
-
-       /* check values of second parameter */
-       for (i = 0;i < m2n2 ;i++)
-    {
-               if (SecondParamaterValue[i] < 1)
-               {
-                       freeArrayOfString(Input_StringMatrix,m1n1);
-                       Scierror(36,_("%s: Wrong values for input argument #%d: Must be >= 1.\n"),fname,2);
-                       return 0;
-               }
-    }
-
-       Output_StringMatrix = partfunction(Input_StringMatrix,m1,n1,SecondParamaterValue,m2n2);
-
-       /* free pointer */
-       freeArrayOfString(Input_StringMatrix,m1n1);
-       if (Output_StringMatrix == NULL)
-       {
-               Scierror(999,_("%s: No more memory.\n"),fname);
-               return 0;
-       }
-       /* put values on stack */
-       CreateVarFromPtr( Rhs+1,MATRIX_OF_STRING_DATATYPE, &m1, &n1, Output_StringMatrix );
-       LhsVar(1) = Rhs+1 ;
-       C2F(putlhsvar)();
-
-       /* free pointer */
-       freeArrayOfString(Output_StringMatrix,m1n1);
-
-       return 0;
-}
-/*--------------------------------------------------------------------------*/
diff --git a/scilab/modules/string/sci_gateway/cpp/sci_part.cpp b/scilab/modules/string/sci_gateway/cpp/sci_part.cpp
new file mode 100644 (file)
index 0000000..eeefb62
--- /dev/null
@@ -0,0 +1,190 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) INRIA - Allan CORNET , Cong WU
+ * 
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at    
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+/* desc : Let  s[k]  stands for the  k  character of Input_StringMatrixings
+  ( or the  white space character if  k >length(s) ).
+  part  returns  c , a matrix of character Input_StringMatrixings, such that  
+  c(i,j)  is the Input_StringMatrixing  "s[v(1)]...s[v(n)]"  (  s=mp(i,j)  ).
+                                                                          */
+/*------------------------------------------------------------------------*/
+#include "string_gw.hxx"
+#include "funcmanager.hxx"
+
+extern "C"
+{
+#include <string.h>
+#include <stdio.h>
+#include "Scierror.h"
+#include "localization.h"
+#include "freeArrayOfString.h"
+#include "partfunction.h"
+}
+/*--------------------------------------------------------------------------*/
+Function::ReturnValue sci_part(typed_list &in, int _iRetCount, typed_list &out)
+{
+    if(in.size() != 2)
+    {
+        ScierrorW(999, _W("%ls: Wrong number of input argument(s): %d expected.\n"), L"part", 2);
+        return Function::Error;
+    }
+
+    if(_iRetCount != -1 && _iRetCount != 1)
+    {
+        ScierrorW(78, _W("%ls: Wrong number of output argument(s): %d expected.\n"), L"part", 1);
+        return Function::Error;
+    }
+
+    //part([], ...
+    if(in[0]->isDouble() && in[0]->getAsDouble()->isEmpty())
+    {
+        out.push_back(Double::Empty());
+        return Function::OK;
+    }
+
+    if(in[0]->isString() == false)
+    {
+        ScierrorW(999, _W("%ls: Wrong type for input argument #%d: Matrix of strings expected.\n"), L"part", 1);
+        return Function::Error;
+    }
+
+    String* pS = in[0]->getAsString();
+
+    if(in[1]->isDouble() == false)
+    {
+        ScierrorW(999, _W("%ls: Wrong type for input argument #%d: Matrix expected.\n"), L"part", 2);
+        return Function::Error;
+    }
+
+
+    Double* pD = in[1]->getAsDouble();
+    if(pD->isEmpty())
+    {
+        out.push_back(new String(L""));
+        return Function::OK;
+    }
+
+     
+    if(!((pD->rows_get() == 1 && pD->cols_get() >= 1) || (pD->rows_get() >= 1 && pD->cols_get() == 1)))
+    {//non vector
+        ScierrorW(999, _W("%ls: Wrong size for input argument #%d: A vector expected.\n"), L"part", 2);
+        return Function::Error;
+    }
+
+    int* piIndex = new int[pD->size_get()];
+    for(int i = 0 ; i < pD->size_get() ; i++)
+    {
+        piIndex[i] = static_cast<int>(pD->real_get()[i]);
+    }
+
+    wchar_t** pwstOut = partfunctionW(pS->string_get(), pS->rows_get(), pS->cols_get(), piIndex, pD->size_get());
+
+    String* pOut = new String(pS->rows_get(), pS->cols_get());
+    pOut->string_set(pwstOut);
+    out.push_back(pOut);
+    return Function::OK;
+       //int i = 0;
+
+       //int m1 = 0, n1 = 0;
+       //char **Input_StringMatrix = NULL;
+       //int m1n1 = 0; /* m1 * n1 */
+
+       //int m2 = 0, n2 = 0;
+       //int StackPosTwo = 0;
+       //int *SecondParamaterValue = NULL;
+       //int m2n2 = 0; /* m2 * n2 */
+       //
+       //char **Output_StringMatrix = NULL;
+
+       //CheckRhs(2,2);
+       //CheckLhs(1,1);
+
+       //if (VarType(1) == sci_matrix) 
+       //{ 
+       //      /*Check for an empty matrix */
+       //      GetRhsVar(1,MATRIX_OF_DOUBLE_DATATYPE,&m1,&n1,&StackPosTwo);
+       //      if (m1 * n1 == 0) 
+       //      {
+       //              LhsVar(1) = 1 ;
+       //              C2F(putlhsvar)();
+       //              return 0;
+       //      }
+ //   }
+       //if (VarType(1) != sci_strings)
+       //{
+       //      OverLoad(1);
+       //      /*Scierror(999,_("%s: Wrong type for first input argument: String expected.\n"),fname);*/
+       //      return 0;
+       //}
+
+       //if (VarType(2) != sci_matrix)
+ //   {
+       //      OverLoad(2);
+       //      /*Scierror(999,_("%s: Wrong type for second input argument: Matrix expected.\n"),fname);*/
+       //      return 0;
+ //   }
+
+       //GetRhsVar(1,MATRIX_OF_STRING_DATATYPE,&m1,&n1,&Input_StringMatrix);
+       //m1n1 = m1 * n1;
+       //
+       //GetRhsVar(2,MATRIX_OF_INTEGER_DATATYPE,&m2,&n2,&StackPosTwo);
+
+       //if ( (m2 == n2) && (n2 == 0) )
+ //   {
+       //      /* part('something',[]) */
+       //      freeArrayOfString(Input_StringMatrix,m1n1);
+       //      CreateVarFromPtr(Rhs+1, MATRIX_OF_STRING_DATATYPE, &m1, &n1, NULL);
+       //      LhsVar(1)=Rhs+1;
+       //      C2F(putlhsvar)();
+       //      return 0;
+       //}
+       //
+       //if ( !( (m2 == 1 && n2 > 0) || (m2 > 0 && n2 == 1) ) )
+       //{
+       //      freeArrayOfString(Input_StringMatrix,m1n1);
+       //      Scierror(89,_("%s: Wrong size for input argument #%d.\n"),fname,2);
+       //      return 0;
+       //}
+
+       //m2n2 = m2 * n2;
+       //SecondParamaterValue = istk(StackPosTwo);
+
+       ///* check values of second parameter */
+       //for (i = 0;i < m2n2 ;i++)
+ //   {
+       //      if (SecondParamaterValue[i] < 1)
+       //      {
+       //              freeArrayOfString(Input_StringMatrix,m1n1);
+       //              Scierror(36,_("%s: Wrong values for input argument #%d: Must be >= 1.\n"),fname,2);
+       //              return 0;
+       //      }
+ //   }
+
+       //Output_StringMatrix = partfunction(Input_StringMatrix,m1,n1,SecondParamaterValue,m2n2);
+
+       ///* free pointer */
+       //freeArrayOfString(Input_StringMatrix,m1n1);
+       //if (Output_StringMatrix == NULL)
+       //{
+       //      Scierror(999,_("%s: No more memory.\n"),fname);
+       //      return 0;
+       //}
+       ///* put values on stack */
+       //CreateVarFromPtr( Rhs+1,MATRIX_OF_STRING_DATATYPE, &m1, &n1, Output_StringMatrix );
+       //LhsVar(1) = Rhs+1 ;
+       //C2F(putlhsvar)();
+
+       ///* free pointer */
+       //freeArrayOfString(Output_StringMatrix,m1n1);
+
+       //return 0;
+}
+/*--------------------------------------------------------------------------*/
index f16224a..48bdab4 100644 (file)
@@ -19,5 +19,6 @@ bool StringModule::Load()
     symbol::Context::getInstance()->AddFunction(Function::createFunction(L"grep", &sci_grep, MODULE_NAME));
     symbol::Context::getInstance()->AddFunction(Function::createFunction(L"stripblanks", &sci_stripblanks, MODULE_NAME));
     symbol::Context::getInstance()->AddFunction(Function::createFunction(L"regexp", &sci_regexp, MODULE_NAME));
+    symbol::Context::getInstance()->AddFunction(Function::createFunction(L"part", &sci_part, MODULE_NAME));
     return true;
 }
index 315902a..a5d0d94 100644 (file)
                                >
                        </File>
                        <File
+                               RelativePath=".\sci_part.cpp"
+                               >
+                       </File>
+                       <File
                                RelativePath=".\sci_regexp.cpp"
                                >
                        </File>
index 2bd6272..e742601 100644 (file)
@@ -58,3 +58,31 @@ char **partfunction(char** stringInput,int m,int n,int *vectInput,int row)
        return parts;
 }
 /*--------------------------------------------------------------------------*/
+wchar_t **partfunctionW(wchar_t** _pwstStringInput, int _iRows, int _iCols, int *_piVectInput, int _iVectSize)
+{
+    int i,j;
+       wchar_t **pwstParts = NULL;
+       int iSize = _iRows * _iCols;
+
+       pwstParts = (wchar_t**)MALLOC(sizeof(wchar_t*)*(iSize));
+
+    for(i = 0 ; i < iSize ; i++)
+       {
+               pwstParts[i] = (wchar_t*)MALLOC(sizeof(wchar_t) * (_iVectSize + 1));
+
+        for(j = 0 ; j < _iVectSize ; j++)
+               {
+                       if(_piVectInput[j] > wcslen(_pwstStringInput[i]))
+                       {
+                               pwstParts[i][j] = L' ';
+                       }
+                       else
+                       {
+                               pwstParts[i][j] = _pwstStringInput[i][_piVectInput[j] - 1];
+                       }
+               }
+               pwstParts[i][j] ='\0';
+       }
+       return pwstParts;
+}
+/*--------------------------------------------------------------------------*/
index 83f1086..ba34110 100644 (file)
@@ -12,6 +12,7 @@
 #ifndef __PARTFUNCTION_H__
 #define __PARTFUNCTION_H__
 
+#include "dynlib_string.h"
 
 /**
 * part : extraction of strings
@@ -22,7 +23,9 @@
 * @param[in] row : row of vectInput
 * @return matrix of strings (same size as stringInput)
 */
-char **partfunction(char** stringInput,int m,int n,int *vectInput,int row);
+STRING_IMPEXP char **partfunction(char** stringInput,int m,int n,int *vectInput,int row);
+
+STRING_IMPEXP wchar_t **partfunctionW(wchar_t** _pwstStringInput, int _iRows, int _iCols, int *_piVectInput, int _iVectSize);
 
 #endif /* __PARTFUNCTION_H__ */
 /*---------------------------------------------------------------------------*/ 
index e60011f..cdca8c8 100644 (file)
                                >
                        </File>
                        <File
-                               RelativePath="..\..\sci_gateway\c\sci_part.c"
-                               >
-                       </File>
-                       <File
                                RelativePath="..\..\sci_gateway\c\sci_str2code.c"
                                >
                        </File>