示例#1
0
        internal static Expr FromPtr(IntPtr expr, NativeGU.NativeMemoryPool pool)
        {
            var Tag = (PgfExprTag)NativeGU.gu_variant_open(expr).Tag;

            if (factories.ContainsKey(Tag))
            {
                return(factories[Tag](expr, pool));
            }
            else
            {
                return(new UnsupportedExpr(expr, pool));
            }
        }
示例#2
0
        internal new static Expr FromPtr(IntPtr expr, NativeGU.NativeMemoryPool pool)
        {
            var dataPtr    = NativeGU.gu_variant_open(expr).Data; // PgfExprLit*
            var data       = Marshal.PtrToStructure <NativePgfExprLit>(dataPtr);
            var literalTag = (PgfLiteralTag)NativeGU.gu_variant_open(data.lit).Tag;

            switch (literalTag)
            {
            case PgfLiteralTag.PGF_LITERAL_STR:
                return(new LiteralStringExpr(expr, pool));

            case PgfLiteralTag.PGF_LITERAL_INT:
                return(new LiteralIntExpr(expr, pool));

            case PgfLiteralTag.PGF_LITERAL_FLT:
                return(new LiteralFloatExpr(expr, pool));

            default:
                throw new ArgumentException();
            }
        }