Add new function for sci_set.
[scilab.git] / scilab / modules / graphics / src / c / BasicAlgos.c
1 /*------------------------------------------------------------------------*/
2 /* file: BasicAlgos.c                                                     */
3 /* Copyright INRIA 2006                                                   */
4 /* Authors : Fabrice Leray, Jean-Baptiste Silvy                           */
5 /* desc : Several basic algorithms which can be used in several places in */
6 /*        the code.                                                       */
7 /*------------------------------------------------------------------------*/
8
9 #include "BasicAlgos.h"
10 #include "MALLOC.h"
11 #include "core_math.h"
12
13 /*------------------------------------------------------------------------*/
14 double sciFindStPosMin( double x[], int n )
15 {
16   double min ;
17   int i ;
18
19   if ( n <= 0 )
20   {
21     return -1.0 ;
22   }
23
24   min = x[0] ;
25
26   for ( i = 1 ; i < n ; i++ )
27   {
28     if ( x[i] > 0.0 && x[i] < min )
29     {
30       min = x[i] ;
31     }
32   }
33
34   /* if we have found at least one positive value in x, min strictly positive */
35   return min ;
36 }
37 /*------------------------------------------------------------------------*/
38 int C2F(entier2d)( integer * n, double * dx,integer * s )
39 {
40   integer ix;
41   for (ix = *n -1 ; ix >= 0; --ix) { dx[ix] = (double) s[ix]; }
42   return 0;
43 }  
44 /*------------------------------------------------------------------------*/
45 int checkMonotony( double vector[], int nbElement )
46 {
47   int i ;
48   if( vector[1] >= vector[0] )
49   {
50     /* might be incresing */
51     for ( i = 1 ; i < nbElement - 1 ; i++ )
52     {
53       if ( vector[i+1] < vector[i] )
54       {
55         /* not increasing */
56         return 0 ;
57       }
58     }
59     return 1 ;
60   }
61   else
62   {
63     /* might be decreasing */
64     for ( i = 1 ; i < nbElement - 1 ; i++ )
65     {
66       if ( vector[i+1] > vector[i] )
67       {
68         /* not decreasing */
69         return 0 ;
70       }
71     }
72     return -1 ;
73
74   }
75   return 0 ;
76
77 }
78 /*------------------------------------------------------------------------*/
79 void doubleArrayCopy( double dest[], const double src[], int nbElement )
80 {
81   memcpy( dest, src, nbElement * sizeof(double) ) ;
82 }
83 /*------------------------------------------------------------------------*/
84 void setDoubleArraySingleValue( double dest[], double value, int nbElement )
85 {
86   int i ;
87   for ( i = 0 ; i < nbElement ; i++ )
88   {
89     dest[i] = value ;
90   }
91 }
92 /*------------------------------------------------------------------------*/
93 double * createNewArrayFromSource( int destSize, const double src[], int srcSize )
94 {
95   int i ;
96   int endCopy = Min( destSize, srcSize ) ;
97   /* create new array */
98   double * dest = MALLOC( destSize * sizeof(double) ) ;
99
100   if ( dest == NULL )
101   {
102     return NULL ;
103   }
104
105   /* copy the element which needs to be copied */
106   memcpy( dest, src, endCopy * sizeof( double ) ) ;
107
108   for ( i = endCopy ; i < destSize ; i++ )
109   {
110     dest[i] = 0.0 ;
111   }
112
113   return dest ;
114
115 }
116 /*------------------------------------------------------------------------*/