1
subroutine basecode_test
5
integer icode,iarray(imax),ibase,i,j
10
c call decode(i,iarray,ibase,imax)
11
c call encode(icode,iarray,ibase,imax)
12
c write(*,*) i,icode,"=",(iarray(j),j=1,imax)
15
call decode(icode,iarray,ibase,imax)
21
write(*,*) (iarray(j),j=1,imax)
23
write(*,*) (iarray(j),j=1,imax)
24
call increment_array(iarray,imax,ibase,done)
29
subroutine EnCode(icode,iarray,ibase,imax)
30
c******************************************************************************
31
c Turns array of integers (iarray) values range (0,ibase-1) into a single
32
c integer icode. icode = Sum[ iarray(k) * ibase^k]
33
c******************************************************************************
38
integer imax !Number of integers to encode
39
integer icode !Output encoded value of iarray
40
integer iarray(imax) !Input values to be encoded
41
integer ibase !Base for encoding
52
if (iarray(i) .ge. 0 .and. iarray(i) .lt. ibase) then
53
icode = icode + iarray(i)*ibase**(i-1)
55
write(*,*) 'Error invalid number to be encoded',i,iarray(i)
60
subroutine DeCode(icode,iarray,ibase,imax)
61
c******************************************************************************
62
c Decodes icode, into base integers used to create it.
63
c integer icode. icode = Sum[ iarray(k) * ibase^k]
64
c******************************************************************************
69
integer imax !Number of integers to encode
70
integer icode !Input encoded value of iarray
71
integer iarray(imax) !Output decoded values icode
72
integer ibase !Base for encoding
81
jcode = icode !create copy for use
84
do while (jcode .ge. ibase**(i-1) .and. iarray(i) .lt. ibase)
85
jcode = jcode-ibase**(i-1)
91
subroutine increment_array(iarray,imax,ibase,done)
92
c************************************************************************
94
c************************************************************************
99
integer imax !Input, number of elements in iarray
100
integer ibase !Base for incrementing, 0 is skipped
101
integer iarray(imax) !Output:Array of values being incremented
102
logical done !Output:Set when no more incrementing
113
do while (i .le. imax .and. .not. found)
114
if (iarray(i) .eq. 0) then !don't increment this
116
elseif (iarray(i) .lt. ibase-1) then
118
iarray(i)=iarray(i)+1