Salome HOME
Improve swig generation process on Windows platform.
[tools/medcoupling.git] / src / INTERP_KERNEL / ExprEval / InterpKernelExprParser.cxx
index 5eb4324aa68f0732b50e67c488918845d9272402..782d756e5fcc8b27dcf889e953e1ef3283ad9c96 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2015  CEA/DEN, EDF R&D
+// Copyright (C) 2007-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -459,22 +459,49 @@ Value *ExprParser::evaluateLowLev(Value *valGen) const
   return stackOfVal.back();
 }
 
+#if __cplusplus >= 201103L
+
+ExprParser::ExprParser(ExprParser&& other):_father(other._father),_leaf(other._leaf),_is_parsing_ok(std::move(other._is_parsing_ok)),_expr(std::move(other._expr)),_sub_expr(std::move(other._sub_expr)),_func_btw_sub_expr(std::move(other._func_btw_sub_expr))
+{
+  other._leaf=0;
+}
+
+ExprParser& ExprParser::operator=(ExprParser&& other)
+{
+  _father=other._father;
+  _is_parsing_ok=std::move(other._is_parsing_ok);
+  _leaf=other._leaf;
+  _expr=std::move(other._expr);
+  _sub_expr=std::move(other._sub_expr);
+  _func_btw_sub_expr=std::move(other._func_btw_sub_expr);
+  other._leaf=other._leaf;
+  other._leaf=0;
+  return *this;
+}
+
+#endif
+
 void ExprParser::reverseThis()
 {
   if(_leaf)
     return ;
   for(std::vector<ExprParser>::iterator iter=_sub_expr.begin();iter!=_sub_expr.end();iter++)
     (*iter).reverseThis();
-  AutoPtr<char> buf(new char[sizeof(ExprParser)]);
-  char *loc(reinterpret_cast<char *>(&_sub_expr[0])),*bufPtr(buf);
   std::size_t sz(_sub_expr.size());
   std::size_t nbOfTurn(sz/2);
+#if __cplusplus >= 201103L
+  for(std::size_t i=0;i<nbOfTurn;i++)
+    std::swap(_sub_expr[i],_sub_expr[sz-i-1]);
+#else
+  AutoPtr<char> buf(new char[sizeof(ExprParser)]);
+  char *loc(reinterpret_cast<char *>(&_sub_expr[0])),*bufPtr(buf);
   for(std::size_t i=0;i<nbOfTurn;i++)
     {
       std::copy(loc+i*sizeof(ExprParser),loc+(i+1)*sizeof(ExprParser),bufPtr);
       std::copy(loc+(sz-i-1)*sizeof(ExprParser),loc+(sz-i)*sizeof(ExprParser),loc+i*sizeof(ExprParser));
       std::copy(bufPtr,bufPtr+sizeof(ExprParser),loc+(sz-i-1)*sizeof(ExprParser));
     }
+#endif
 }
 
 ExprParserOfEval ExprParser::convertMeTo() const