]> SALOME platform Git repositories - modules/shaper.git/blobdiff - src/SketchSolver/PlaneGCSSolver/PlaneGCSSolver_ScalarWrapper.cpp
Salome HOME
Second phase of SketchSolver refactoring
[modules/shaper.git] / src / SketchSolver / PlaneGCSSolver / PlaneGCSSolver_ScalarWrapper.cpp
diff --git a/src/SketchSolver/PlaneGCSSolver/PlaneGCSSolver_ScalarWrapper.cpp b/src/SketchSolver/PlaneGCSSolver/PlaneGCSSolver_ScalarWrapper.cpp
new file mode 100644 (file)
index 0000000..2811988
--- /dev/null
@@ -0,0 +1,66 @@
+// Copyright (C) 2014-20xx CEA/DEN, EDF R&D
+
+// File:    PlaneGCSSolver_ScalarWrapper.cpp
+// Created: 14 Dec 2015
+// Author:  Artem ZHIDKOV
+
+#include <PlaneGCSSolver_ScalarWrapper.h>
+#include <PlaneGCSSolver_ParameterWrapper.h>
+
+
+
+PlaneGCSSolver_ScalarWrapper::PlaneGCSSolver_ScalarWrapper(
+    const AttributePtr              theAttribute,
+    const ParameterWrapperPtr       theParam)
+{
+  myBaseAttribute = theAttribute;
+  myParameters.assign(1, theParam);
+}
+
+void PlaneGCSSolver_ScalarWrapper::setGroup(const GroupID& theGroup)
+{
+  myGroup = theGroup;
+  myParameters.front()->setGroup(theGroup);
+}
+
+double* PlaneGCSSolver_ScalarWrapper::scalar() const
+{
+  std::shared_ptr<PlaneGCSSolver_ParameterWrapper> aParam =
+      std::dynamic_pointer_cast<PlaneGCSSolver_ParameterWrapper>(myParameters.front());
+  return aParam->parameter();
+}
+
+bool PlaneGCSSolver_ScalarWrapper::isUsed(AttributePtr theAttribute) const
+{
+  return isBase(theAttribute);
+}
+
+bool PlaneGCSSolver_ScalarWrapper::isEqual(const EntityWrapperPtr& theOther)
+{
+  if (type() != theOther->type())
+    return false;
+
+  // Verify equality of parameters
+  const std::list<ParameterWrapperPtr>& anOtherParams = theOther->parameters();
+  if (myParameters.size() != anOtherParams.size())
+    return false;
+  std::list<ParameterWrapperPtr>::const_iterator aMyIt = myParameters.begin();
+  std::list<ParameterWrapperPtr>::const_iterator anOtherIt = anOtherParams.begin();
+  for (; aMyIt != myParameters.end(); ++aMyIt, ++anOtherIt)
+    if (!(*aMyIt)->isEqual(*anOtherIt))
+      return false;
+  return true;
+}
+
+bool PlaneGCSSolver_ScalarWrapper::update(const EntityWrapperPtr& theOther)
+{
+  bool isUpdated = false;
+  std::list<ParameterWrapperPtr> aMyParams = parameters();
+  std::list<ParameterWrapperPtr> anOtherParams = theOther->parameters();
+  std::list<ParameterWrapperPtr>::const_iterator aMyParIt = aMyParams.begin();
+  std::list<ParameterWrapperPtr>::const_iterator anOtherParIt = anOtherParams.begin();
+  for (; aMyParIt != aMyParams.end() && anOtherParIt != anOtherParams.end();
+      ++aMyParIt, ++anOtherParIt)
+    isUpdated = (*aMyParIt)->update(*anOtherParIt);
+  return isUpdated;
+}