# This module reuses the value_writer and value_reader processes
# from the value pass example to demonstrate the skip method.
# value_reader_skip reads the same value as value_reader itself and
# returns 0 when the value is odd, telling DeBasher to skip
# value_reader for that run, or 1 when it is even, letting it
# execute normally. This shows how a process can decide, from its
# own options, whether it needs to run at all. A skipped process
# counts as finished, so the processes that depend on it still run.
value_writer_document()
{
document_process "Takes two numbers and produce their sum as output."
}
value_writer_explain_opts()
{
# -num-a option
local description="First number to be summed"
explain_opt "-num-a" "<int>" "$description"
# -num-b option
local description="Second number to be summed"
explain_opt "-num-b" "<int>" "$description"
# -outv option
local description="output value descriptor"
explain_opt "-outv" "<int>" "$description"
}
value_writer_identify_cmdline_opts()
{
opt_is_cmdline "-num-a"
opt_is_cmdline "-num-b"
}
value_writer_define_opts()
{
# Initialize variables
local cmdline=$1
local process_spec=$2
local process_name=$3
local process_outdir=$4
local optlist=""
# -num-a option
define_cmdline_opt "$cmdline" "-num-a" optlist || return 1
# -num-b option
define_cmdline_opt "$cmdline" "-num-b" optlist || return 1
# Define value descriptor option
define_value_desc_opt "-outv" optlist || return 1
# Save option list
save_opt_list optlist
}
value_writer()
{
# Initialize variables
local num_a=$(read_opt_value_from_func_args "-num-a" "$@")
local num_b=$(read_opt_value_from_func_args "-num-b" "$@")
local outv=$(read_opt_value_from_func_args "-outv" "$@")
# Calculate the sum
local sum=$((num_a + num_b))
# Write value to descriptor
write_value_to_desc "${sum}" "${outv}"
}
value_reader_document()
{
document_process "Get a value produced by another process, increases it in one unit and writes it in own directory."
}
value_reader_explain_opts()
{
# -val-desc option
local description="value descriptor"
explain_opt "-val-desc" "<int>" "$description"
# -outf option
local description="output file"
explain_opt "-outf" "<file>" "$description"
}
value_reader_identify_cmdline_opts()
{
:
}
value_reader_define_opts()
{
# Initialize variables
local cmdline=$1
local process_spec=$2
local process_name=$3
local process_outdir=$4
local optlist=""
# Define value descriptor option related to output value of
# value_writer
define_opt_from_proc_out "-val-desc" "value_writer" "-outv" optlist || return 1
# Define output file option
local outf="${process_outdir}/${process_name}.out"
define_opt "-outf" "${outf}" optlist || return 1
# Save option list
save_opt_list optlist
}
value_reader()
{
# Initialize variables
local value=$(read_opt_value_from_func_args "-val-desc" "$@")
local outf=$(read_opt_value_from_func_args "-outf" "$@")
# Increment value by 1
((value++))
# Write value to file
echo "$value" > "${outf}"
}
value_reader_skip()
{
# Initialize variables
local value=$(read_opt_value_from_func_args "-val-desc" "$@")
local outf=$(read_opt_value_from_func_args "-outf" "$@")
# Skip if read value is odd
if ((value % 2 == 0)); then
return 1
else
return 0
fi
}
debasher_skip_example_program()
{
add_debasher_process "value_writer" "cpus=1 mem=32 time=00:01:00"
add_debasher_process "value_reader" "cpus=1 mem=32 time=00:01:00"
}