//--------------------------------------------------------------------------- Value::Value(const IValue &a_Val) :IValue(cmVAL) ,m_psVal(nullptr) ,m_pvVal(nullptr) ,m_pCache(nullptr) { Reset(); switch(a_Val.GetType()) { case 'i': case 'f': case 'b': m_val = cmplx_type(a_Val.GetFloat(), 0); break; case 'c': m_val = cmplx_type(a_Val.GetFloat(), a_Val.GetImag()); break; case 's': if (!m_psVal) m_psVal = new string_type(a_Val.GetString()); else *m_psVal = a_Val.GetString(); break; case 'm': if (!m_pvVal) m_pvVal = new matrix_type(a_Val.GetArray()); else *m_pvVal = a_Val.GetArray(); break; case 'v': break; default: MUP_FAIL(INVALID_TYPE_CODE); } m_cType = a_Val.GetType(); }