diff --git a/Source/SIMPLib/CoreFilters/ArrayCalculator.cpp b/Source/SIMPLib/CoreFilters/ArrayCalculator.cpp index a229db58c..86636d27c 100644 --- a/Source/SIMPLib/CoreFilters/ArrayCalculator.cpp +++ b/Source/SIMPLib/CoreFilters/ArrayCalculator.cpp @@ -73,63 +73,76 @@ #include "util/SubtractionOperator.h" #include "util/TanOperator.h" -#define CREATE_CALCULATOR_ARRAY(itemPtr, iDataArrayPtr) \ - if(TemplateHelpers::CanDynamicCast()(iDataArrayPtr)) \ - { \ - FloatArrayType::Pointer arrayCast = std::dynamic_pointer_cast(iDataArrayPtr); \ - itemPtr = CalculatorArray::New(arrayCast, ICalculatorArray::Array, !getInPreflight()); \ - } \ - else if(TemplateHelpers::CanDynamicCast()(iDataArrayPtr)) \ - { \ - DoubleArrayType::Pointer arrayCast = std::dynamic_pointer_cast(iDataArrayPtr); \ - itemPtr = CalculatorArray::New(arrayCast, ICalculatorArray::Array, !getInPreflight()); \ - } \ - else if(TemplateHelpers::CanDynamicCast()(iDataArrayPtr)) \ - { \ - Int8ArrayType::Pointer arrayCast = std::dynamic_pointer_cast(iDataArrayPtr); \ - itemPtr = CalculatorArray::New(arrayCast, ICalculatorArray::Array, !getInPreflight()); \ - } \ - else if(TemplateHelpers::CanDynamicCast()(iDataArrayPtr)) \ - { \ - UInt8ArrayType::Pointer arrayCast = std::dynamic_pointer_cast(iDataArrayPtr); \ - itemPtr = CalculatorArray::New(arrayCast, ICalculatorArray::Array, !getInPreflight()); \ - } \ - else if(TemplateHelpers::CanDynamicCast()(iDataArrayPtr)) \ - { \ - Int16ArrayType::Pointer arrayCast = std::dynamic_pointer_cast(iDataArrayPtr); \ - itemPtr = CalculatorArray::New(arrayCast, ICalculatorArray::Array, !getInPreflight()); \ - } \ - else if(TemplateHelpers::CanDynamicCast()(iDataArrayPtr)) \ - { \ - UInt16ArrayType::Pointer arrayCast = std::dynamic_pointer_cast(iDataArrayPtr); \ - itemPtr = CalculatorArray::New(arrayCast, ICalculatorArray::Array, !getInPreflight()); \ - } \ - else if(TemplateHelpers::CanDynamicCast()(iDataArrayPtr)) \ - { \ - Int32ArrayType::Pointer arrayCast = std::dynamic_pointer_cast(iDataArrayPtr); \ - itemPtr = CalculatorArray::New(arrayCast, ICalculatorArray::Array, !getInPreflight()); \ - } \ - else if(TemplateHelpers::CanDynamicCast()(iDataArrayPtr)) \ - { \ - UInt32ArrayType::Pointer arrayCast = std::dynamic_pointer_cast(iDataArrayPtr); \ - itemPtr = CalculatorArray::New(arrayCast, ICalculatorArray::Array, !getInPreflight()); \ - } \ - else if(TemplateHelpers::CanDynamicCast()(iDataArrayPtr)) \ - { \ - Int64ArrayType::Pointer arrayCast = std::dynamic_pointer_cast(iDataArrayPtr); \ - itemPtr = CalculatorArray::New(arrayCast, ICalculatorArray::Array, !getInPreflight()); \ - } \ - else if(TemplateHelpers::CanDynamicCast()(iDataArrayPtr)) \ - { \ - UInt64ArrayType::Pointer arrayCast = std::dynamic_pointer_cast(iDataArrayPtr); \ - itemPtr = CalculatorArray::New(arrayCast, ICalculatorArray::Array, !getInPreflight()); \ - } \ - else if(TemplateHelpers::CanDynamicCast>()(iDataArrayPtr)) \ - { \ - DataArray::Pointer arrayCast = std::dynamic_pointer_cast>(iDataArrayPtr); \ - itemPtr = CalculatorArray::New(arrayCast, ICalculatorArray::Array, !getInPreflight()); \ +namespace +{ +CalculatorItem::Pointer createCalculatorArray(AbstractFilter* filter, IDataArrayShPtr iDataArrayPtr) +{ + CalculatorItem::Pointer itemPtr = CalculatorItem::NullPointer(); + if(TemplateHelpers::CanDynamicCast()(iDataArrayPtr)) + { + FloatArrayType::Pointer arrayCast = std::dynamic_pointer_cast(iDataArrayPtr); + itemPtr = CalculatorArray::New(arrayCast, ICalculatorArray::Array, !filter->getInPreflight()); + } + else if(TemplateHelpers::CanDynamicCast()(iDataArrayPtr)) + { + DoubleArrayType::Pointer arrayCast = std::dynamic_pointer_cast(iDataArrayPtr); + itemPtr = CalculatorArray::New(arrayCast, ICalculatorArray::Array, !filter->getInPreflight()); + } + else if(TemplateHelpers::CanDynamicCast()(iDataArrayPtr)) + { + Int8ArrayType::Pointer arrayCast = std::dynamic_pointer_cast(iDataArrayPtr); + itemPtr = CalculatorArray::New(arrayCast, ICalculatorArray::Array, !filter->getInPreflight()); + } + else if(TemplateHelpers::CanDynamicCast()(iDataArrayPtr)) + { + UInt8ArrayType::Pointer arrayCast = std::dynamic_pointer_cast(iDataArrayPtr); + itemPtr = CalculatorArray::New(arrayCast, ICalculatorArray::Array, !filter->getInPreflight()); + } + else if(TemplateHelpers::CanDynamicCast()(iDataArrayPtr)) + { + Int16ArrayType::Pointer arrayCast = std::dynamic_pointer_cast(iDataArrayPtr); + itemPtr = CalculatorArray::New(arrayCast, ICalculatorArray::Array, !filter->getInPreflight()); + } + else if(TemplateHelpers::CanDynamicCast()(iDataArrayPtr)) + { + UInt16ArrayType::Pointer arrayCast = std::dynamic_pointer_cast(iDataArrayPtr); + itemPtr = CalculatorArray::New(arrayCast, ICalculatorArray::Array, !filter->getInPreflight()); + } + else if(TemplateHelpers::CanDynamicCast()(iDataArrayPtr)) + { + Int32ArrayType::Pointer arrayCast = std::dynamic_pointer_cast(iDataArrayPtr); + itemPtr = CalculatorArray::New(arrayCast, ICalculatorArray::Array, !filter->getInPreflight()); + } + else if(TemplateHelpers::CanDynamicCast()(iDataArrayPtr)) + { + UInt32ArrayType::Pointer arrayCast = std::dynamic_pointer_cast(iDataArrayPtr); + itemPtr = CalculatorArray::New(arrayCast, ICalculatorArray::Array, !filter->getInPreflight()); + } + else if(TemplateHelpers::CanDynamicCast()(iDataArrayPtr)) + { + Int64ArrayType::Pointer arrayCast = std::dynamic_pointer_cast(iDataArrayPtr); + itemPtr = CalculatorArray::New(arrayCast, ICalculatorArray::Array, !filter->getInPreflight()); + } + else if(TemplateHelpers::CanDynamicCast()(iDataArrayPtr)) + { + UInt64ArrayType::Pointer arrayCast = std::dynamic_pointer_cast(iDataArrayPtr); + itemPtr = CalculatorArray::New(arrayCast, ICalculatorArray::Array, !filter->getInPreflight()); + } + else if(TemplateHelpers::CanDynamicCast()(iDataArrayPtr)) + { + BoolArrayType::Pointer arrayCast = std::dynamic_pointer_cast(iDataArrayPtr); + itemPtr = CalculatorArray::New(arrayCast, ICalculatorArray::Array, !filter->getInPreflight()); + } + else if(TemplateHelpers::CanDynamicCast()(iDataArrayPtr)) + { + SizeTArrayType::Pointer arrayCast = std::dynamic_pointer_cast(iDataArrayPtr); + itemPtr = CalculatorArray::New(arrayCast, ICalculatorArray::Array, !filter->getInPreflight()); } + return itemPtr; +} +} + enum createdPathID : RenameDataPath::DataID_t { DataArrayID = 1 @@ -841,9 +854,8 @@ bool ArrayCalculator::parseIndexOperator(QString token, QVectorreduceToOneComponent(index, !getInPreflight()); - CalculatorItem::Pointer itemPtr; - CREATE_CALCULATOR_ARRAY(itemPtr, reducedArray) + CalculatorItem::Pointer itemPtr = createCalculatorArray(this, reducedArray); parsedInfix.push_back(itemPtr); QString ss = QObject::tr("Item '%1' in the infix expression is the name of an array in the selected Attribute Matrix, but it is currently being used as an indexing operator").arg(token); @@ -879,7 +891,6 @@ bool ArrayCalculator::parseCommaOperator(QString token, QVector return false; } - CalculatorItem::Pointer itemPtr; - - CREATE_CALCULATOR_ARRAY(itemPtr, dataArray) + CalculatorItem::Pointer itemPtr = createCalculatorArray(this, dataArray); parsedInfix.push_back(itemPtr); return true; }