Subversion Repositories wimsdev

Rev

Rev 12038 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 12038 Rev 13586
Line 1... Line 1...
1
!if $wims_read_parm!=slib_header
1
!if $wims_read_parm!=slib_header
2
 !goto proc
2
  !goto proc
3
!endif
3
!endif
4
 
4
 
5
slib_parms=2\
5
slib_parms=2\
6
 ,[x_1,...,x_n] \
6
 ,[x_1,...,x_n] \
7
 ,[a_1,...,a_m]
7
 ,[a_1,...,a_m]
Line 21... Line 21...
21
!reset slib_END1 slib_END
21
!reset slib_END1 slib_END
22
!distribute items $wims_read_parm into slib_data,slib_w
22
!distribute items $wims_read_parm into slib_data,slib_w
23
slib_v=!declosing $slib_data
23
slib_v=!declosing $slib_data
24
slib_w=!declosing $slib_w
24
slib_w=!declosing $slib_w
25
!if $slib_v$slib_w=$empty
25
!if $slib_v$slib_w=$empty
26
   slib_out=0
26
  slib_out=0
27
   !exit
27
  !exit
28
!else
28
!else
29
   slib_v=!sort numeric item $slib_v
29
  slib_v=!sort numeric item $slib_v
30
   slib_max=!item -1 of $slib_v
30
  slib_max=!item -1 of $slib_v
31
   slib_min=!item 1 of $slib_v
31
  slib_min=!item 1 of $slib_v
32
   slib_cnt= !itemcnt $slib_v
32
  slib_cnt= !itemcnt $slib_v
33
   slib_cntw=!itemcnt $slib_w
33
  slib_cntw=!itemcnt $slib_w
34
   !if $slib_cntw=2
34
  !if $slib_cntw=2
35
      !distribute item $slib_w into slib_b,slib_p
35
    !distribute item $slib_w into slib_b,slib_p
36
      slib_c=$[ceil(($slib_max-$slib_b)/$slib_p)]
36
    slib_c=$[ceil(($slib_max-$slib_b)/$slib_p)]
37
      slib_d=$[min(0,floor(($slib_min-($slib_b))/$slib_p))]
37
    slib_d=$[min(0,floor(($slib_min-($slib_b))/$slib_p))]
38
      slib_w=!values $slib_b+x*$slib_p for x=$slib_d to $slib_c
38
    slib_w=!values $slib_b+x*$slib_p for x=$slib_d to $slib_c
39
   !endif
39
  !endif
40
   slib_w=!sort numeric item $slib_w
40
  slib_w=!sort numeric item $slib_w
41
   !if $slib_w=$empty
41
  !if $slib_w=$empty
42
      slib_N=$[ceil(4*($slib_cnt)^(1/4))]
42
    slib_N=$[ceil(4*($slib_cnt)^(1/4))]
43
      slib_w=!values $slib_min+x*$[(($slib_max-($slib_min))/$slib_N)] for x=0 to $slib_N
43
    slib_w=!values $slib_min+x*$[(($slib_max-($slib_min))/$slib_N)] for x=0 to $slib_N
44
   !else
44
  !else
45
      slib_m=!item -1 of $slib_w
45
    slib_m=!item -1 of $slib_w
46
      slib_max=$[max($slib_max,$slib_m)]
46
    slib_max=$[max($slib_max,$slib_m)]
47
      slib_m=!item 1 of $slib_w
47
    slib_m=!item 1 of $slib_w
48
      slib_min=$[min($slib_min,$slib_m)]
48
    slib_min=$[min($slib_min,$slib_m)]
49
      slib_w=$slib_min,$slib_w,$slib_max
49
    slib_w=$slib_min,$slib_w,$slib_max
50
      slib_w= !listuniq $slib_w
50
    slib_w= !listuniq $slib_w
51
   !endif
51
  !endif
52
   slib_cpt=0
52
  slib_cpt=0
53
   slib_cntw=!itemcnt $slib_w
53
  slib_cntw=!itemcnt $slib_w
54
   slib_wpointer=2
54
  slib_wpointer=2
55
# end est le point de separation
55
  # end est le point de separation
56
   slib_end=!item $slib_wpointer of $slib_w
56
  slib_end=!item $slib_wpointer of $slib_w
57
   slib_result=
57
  slib_result=
58
   !for slib_i=1 to $slib_cnt
58
  !for slib_i=1 to $slib_cnt
59
       slib_dat=!item $slib_i of $slib_v
59
    slib_dat=!item $slib_i of $slib_v
60
      !if $slib_dat<$slib_end or ($slib_dat=$slib_max and $slib_wpointer=$slib_cntw)
60
    !if $slib_dat<$slib_end or ($slib_dat=$slib_max and $slib_wpointer=$slib_cntw)
61
  # On est toujours dans le meme intervalle
61
      # On est toujours dans le meme intervalle
62
          !advance slib_cpt
62
      !advance slib_cpt
63
       !else
63
    !else
64
  # Le point de separation franchi
64
      # Le point de separation franchi
65
  # creer un nouveau point de separation
65
      # creer un nouveau point de separation
66
:point
66
      :point
67
         !advance slib_wpointer
67
      !advance slib_wpointer
68
         slib_end=!item $slib_wpointer of $slib_w
68
      slib_end=!item $slib_wpointer of $slib_w
69
         !if $slib_wpointer < $slib_cntw
69
      !if $slib_wpointer < $slib_cntw
70
             slib_end1=!item $[$slib_wpointer] of $slib_w
70
        slib_end1=!item $[$slib_wpointer] of $slib_w
71
         !else
71
      !else
72
             slib_end1=$[$slib_end+1]
72
        slib_end1=$[$slib_end+1]
73
         !endif
-
 
74
         slib_END1=!append item $slib_end1 to $slib_END1
-
 
75
         slib_END=!append item $slib_end to $slib_END
-
 
76
         slib_result=!append item $[$slib_cpt] to $slib_result
-
 
77
         !ifval $slib_dat>=$slib_end1
-
 
78
            slib_cpt=0
-
 
79
            !goto point
-
 
80
         !else
-
 
81
            slib_cpt=1
-
 
82
         !endif
-
 
83
      !endif
73
      !endif
-
 
74
      slib_END1=!append item $slib_end1 to $slib_END1
-
 
75
      slib_END=!append item $slib_end to $slib_END
-
 
76
      slib_result=!append item $[$slib_cpt] to $slib_result
-
 
77
      !ifval $slib_dat>=$slib_end1
-
 
78
        slib_cpt=0
-
 
79
        !goto point
-
 
80
      !else
-
 
81
        slib_cpt=1
-
 
82
      !endif
-
 
83
    !endif
84
   !next slib_i
84
  !next slib_i
85
#Le dernier intervalle
85
  #Le dernier intervalle
86
   slib_result=!append item $[$slib_cpt] to $slib_result
86
  slib_result=!append item $[$slib_cpt] to $slib_result
87
   !if $[$slib_wpointer+1] <=$slib_cntw
87
  !if $[$slib_wpointer+1] <=$slib_cntw
88
      slib_zero=!values 0 for x=$[$slib_wpointer+1] to $slib_cntw
88
    slib_zero=!values 0 for x=$[$slib_wpointer+1] to $slib_cntw
89
      slib_result=$slib_result,$slib_zero
89
    slib_result=$slib_result,$slib_zero
90
   !endif
90
  !endif
91
!endif
91
!endif
92
slib_out=!trim $slib_result
92
slib_out=!trim $slib_result
93
slib_out=!line -1 of $slib_out
93
slib_out=!line -1 of $slib_out
94
slib_out=[$slib_out],[$slib_w], [$slib_END], [$slib_END1]
94
slib_out=[$slib_out],[$slib_w], [$slib_END], [$slib_END1]