From 512f1982d3dfe062a213d5a7663bb64963e09a04 Mon Sep 17 00:00:00 2001 From: Claire Mouton Date: Wed, 3 Oct 2012 12:54:14 +0000 Subject: [PATCH] Feature #1648 Add a box finding a value in a list of intervals. --- ...bbstdGetIntervalNumberFromIntervalList.cxx | 48 +++++++++++++++++++ .../bbstdGetIntervalNumberFromIntervalList.h | 40 ++++++++++++++++ 2 files changed, 88 insertions(+) create mode 100644 packages/std/src/bbstdGetIntervalNumberFromIntervalList.cxx create mode 100644 packages/std/src/bbstdGetIntervalNumberFromIntervalList.h diff --git a/packages/std/src/bbstdGetIntervalNumberFromIntervalList.cxx b/packages/std/src/bbstdGetIntervalNumberFromIntervalList.cxx new file mode 100644 index 0000000..37ee9e6 --- /dev/null +++ b/packages/std/src/bbstdGetIntervalNumberFromIntervalList.cxx @@ -0,0 +1,48 @@ +#include "bbstdGetIntervalNumberFromIntervalList.h" +#include "bbstdPackage.h" + +namespace bbstd +{ + +BBTK_ADD_BLACK_BOX_TO_PACKAGE(std,GetIntervalNumberFromIntervalList) +BBTK_BLACK_BOX_IMPLEMENTATION(GetIntervalNumberFromIntervalList,bbtk::AtomicBlackBox); + +void GetIntervalNumberFromIntervalList::Process() +{ + // Sets the default value, in the case of an inexisting value in the intervals. + bbSetOutputIntervalNumber(bbGetInputErrorValue()); + bool found = false; + + // Looks for the first interval containing the input value. + for (int i = 0; i < (int) bbGetInputIntervalList().size() - 1; i++) + { + if (found == false) + { + if (bbGetInputValue() >= bbGetInputIntervalList()[i] && bbGetInputValue() < bbGetInputIntervalList()[i+1]) + { + bbSetOutputIntervalNumber(i); + found = true; + } + } + } + +} + +void GetIntervalNumberFromIntervalList::bbUserSetDefaultValues() +{ + bbSetInputErrorValue(-1.0); +} + +void GetIntervalNumberFromIntervalList::bbUserInitializeProcessing() +{ + +} + +void GetIntervalNumberFromIntervalList::bbUserFinalizeProcessing() +{ + +} +} +// EO namespace bbstd + + diff --git a/packages/std/src/bbstdGetIntervalNumberFromIntervalList.h b/packages/std/src/bbstdGetIntervalNumberFromIntervalList.h new file mode 100644 index 0000000..7a63ea7 --- /dev/null +++ b/packages/std/src/bbstdGetIntervalNumberFromIntervalList.h @@ -0,0 +1,40 @@ +#ifndef __bbstdGetIntervalNumberFromIntervalList_h_INCLUDED__ +#define __bbstdGetIntervalNumberFromIntervalList_h_INCLUDED__ +#include "bbstd_EXPORT.h" +#include "bbtkAtomicBlackBox.h" + +namespace bbstd +{ + +class bbstd_EXPORT GetIntervalNumberFromIntervalList + : + public bbtk::AtomicBlackBox +{ + BBTK_BLACK_BOX_INTERFACE(GetIntervalNumberFromIntervalList,bbtk::AtomicBlackBox); + + BBTK_DECLARE_INPUT(Value, double); + BBTK_DECLARE_INPUT(IntervalList, std::vector); + BBTK_DECLARE_INPUT(ErrorValue, double); + + BBTK_DECLARE_OUTPUT(IntervalNumber, int); + + BBTK_PROCESS(Process); + void Process(); +}; + + BBTK_BEGIN_DESCRIBE_BLACK_BOX(GetIntervalNumberFromIntervalList,bbtk::AtomicBlackBox); + BBTK_NAME("GetIntervalNumberFromIntervalList"); + BBTK_AUTHOR("Claire Mouton"); + BBTK_DESCRIPTION("Providing a value and a list of intervals, the box returns the first interval number containing the input value. Interval numbers start at 0."); + BBTK_CATEGORY(""); + BBTK_INPUT(GetIntervalNumberFromIntervalList,Value,"The value to be looked for in the interval list.",double,""); + BBTK_INPUT(GetIntervalNumberFromIntervalList,IntervalList,"Interval List provided as a list of double values corresponding to intervals. For example, '0 10 20 50' corresponds to the three following intervals 0/[0; 10[ 1/[10; 20[ 2/[20; 50[.",std::vector,""); + BBTK_INPUT(GetIntervalNumberFromIntervalList,ErrorValue,"The output value returned if the value is not in any interval (default is -1).",double,""); + BBTK_OUTPUT(GetIntervalNumberFromIntervalList,IntervalNumber,"The (first) interval number containing the input value. If the value is not in any interval, the output is set to the ErrorValue (default is -1).",int,""); + +BBTK_END_DESCRIBE_BLACK_BOX(GetIntervalNumberFromIntervalList); +} +// EO namespace bbstd + +#endif // __bbstdGetIntervalNumberFromIntervalList_h_INCLUDED__ + -- 2.45.1