Due to all of these downsides I have contemplated possible solutions which I will attempt to describe.
Using structs
One idea that came to mind is to pack all of the global variables into a struct and pass the struct to all of the functions and obtain the global variables from this struct. This solution certainly solves the problem of passing so many parameters to functions. However, it does not improve code portability because every *.cc oct-file function needs its own struct. This solution is also problematic because all of the names of global variables have to be referenced now through the struct so
center[i][j]
would become parameter_struct.center[i][j]
(obviously the name of the struct could be as short as p
).Using classes
Another quite simple solution would be to create a class. This class would have data members that were previously the global variables and function members that were the old functions called from old
main()
. As there are similarities between different TISEAN programs, it could be possible to even create a prototype class and inherit from it.
There are however downsides to this option as well. First of all, Octave code guidelines specifies that classes should be in separate files. This would mean creating 2 more files for each program that was ported using the C++ wrapper. Apart from that, the memory might have to allocated using
new
/delete
, because the preferred method of using the macro OCTAVE_LOCAL_BUFFER
might be difficult (or impossible) to apply to this case. This objection can be worked around in other ways, such as using Array
classes to allocate the data and then get a pointer to them using fortran_vec()
.Summary
Performing the aforementioned code improvement, although helpful, is not critical. Therefore any attempts to implement it will be deferred until after the functions outlined at the beginning of the project are complete.
Timeline update
So far I have been giving progress reports on the TISEAN porting project. This time, however, I would like to also compare the outlined schedule for the project with the actual progress made.
Since the last post I have additionally ported:
Since the last post I have additionally ported:
xzero
lyap_r
lyap_k
lyap_spec
In one of my first posts I stated that I would like to finish Dimensions and Entropies before the midterm assessment. Currently I have finished up Lyapunov Exponents and I plan to start working on Dimensions and Entropies this week. Since there are 2+ weeks to the Midterm Assessment I believe it is possible to complete all of the goals for this section of the project as planned.
Nice to see someone working on improving Tisean! I tried to use Tisean for a while but found no comments in the code, so if the documentation does not explain well what a parameter does I have no way to know.
OdpowiedzUsuń