Example #1
0
        /// <summary>
        /// IComparable.CompareTo implementation.
        /// </summary>
        public int CompareTo(object obj)
        {
            if (obj is UnaryScalarOp)
            {
                UnaryScalarOp I          = (UnaryScalarOp)obj;
                int           opNameComp = m_opName.CompareTo(I.m_opName);
                if (opNameComp != 0)
                {
                    return(opNameComp);
                }
                else
                {
                    return(Util.CompareScalarMultivector(this.value, I.value));
                }
            }

            throw new ArgumentException("UnaryScalarOp.CompareTo(): object is not an UnaryScalarOp");
        }
Example #2
0
        /// <summary>
        /// Converts a <c>RefGA.Symbolic.UnaryScalarOp</c> to code.
        ///
        /// Handles special cases (such as inversion) and understands floating point
        /// types (e.g., <c>fabsf()</c> is used for floats and <c>fabs()</c> is used for doubles in C.
        /// </summary>
        /// <param name="S">Used for output language.</param>
        /// <param name="FT">Floating point type used.</param>
        /// <param name="Op">The operation to convert to code.</param>
        /// <returns>Code for implementing <c>Op</c>c>.</returns>
        public static string UnaryScalarOpToLangString(G25.Specification S, G25.FloatType FT, RefGA.Symbolic.UnaryScalarOp Op)
        {
            string valueStr = ScalarOpValueToLangString(S, FT, Op.value);

            /*{
             *  if (!Op.value.IsScalar()) throw new Exception("G25.CG.Shared.BasisBlade.ScalarOpToLangString(): value should be scalar, found: " + Op.value.ToString(S.m_basisVectorNames));
             *  if (Op.value.IsZero()) valueStr = ScalarToLangString(S, FT, RefGA.BasisBlade.ZERO);
             *  else valueStr = ScalarToLangString(S, FT, Op.value.BasisBlades[0]);
             * }*/

            if (Op.opName == UnaryScalarOp.INVERSE)
            {
                if (FT.type == "float")
                {
                    return("1.0f / (" + valueStr + ")");
                }
                else if (FT.type == "double")
                {
                    return("1.0 / (" + valueStr + ")");
                }
                else
                {
                    return(FT.castStr + "1.0 / (" + valueStr + ")");
                }
            }
            else
            {
                return(OpNameToLangString(S, FT, Op.opName) + "(" + valueStr + ")");
            }
        } // end of function ScalarOpToLangString()