Example #1
0
        /// <summary>
        /// Visits the fields of a particular type.
        /// </summary>
        /// <param name="typeInfo">The record type whose field may be visited.</param>
        /// <returns>
        /// true if the traversal was terminated prematurely by <see cref="VisitField(Cursor)"/>
        /// returning false.
        /// </returns>
        public bool VisitFields(TypeInfo typeInfo)
        {
            Requires.NotNull(typeInfo, nameof(typeInfo));

            var            translationUnit = typeInfo.TranslationUnit;
            CXFieldVisitor visitor         = (C, client_data) =>
            {
                if (VisitField(Cursor.Create(C, translationUnit)))
                {
                    return(CXVisitorResult.CXVisit_Continue);
                }
                else
                {
                    return(CXVisitorResult.CXVisit_Break);
                }
            };

            try
            {
                return(NativeMethods.clang_Type_visitFields(
                           typeInfo.Struct,
                           Marshal.GetFunctionPointerForDelegate(visitor),
                           null) != 0);
            }
            finally
            {
                GC.KeepAlive(visitor);
            }
        }
Example #2
0
        public CXVisitorResult VisitFields(CXFieldVisitor visitor, CXClientData clientData)
        {
            var pVisitor = Marshal.GetFunctionPointerForDelegate(visitor);
            var result   = (CXVisitorResult)clang.Type_visitFields(this, pVisitor, clientData);

            GC.KeepAlive(visitor);
            return(result);
        }
Example #3
0
        /// <summary>
        /// Create Native Clang Field Visitor
        /// </summary>
        /// <param name="visitor">Managed Clang Field Visitor Function</param>
        /// <returns>Native Clang Field Visitor</returns>
        private CXFieldVisitor CreateNativeFieldVisitor(Func <ClangCursor, IntPtr, VisitorResult> visitor)
        {
            CXFieldVisitor v = (native_cursor, client_data) =>
            {
                var cursor = native_cursor.ToManaged();
                return(visitor(cursor, client_data));
            };

            return(v);
        }
Example #4
0
 internal static extern uint clang_Type_visitFields(CXType type, CXFieldVisitor visitor, CXClientData client_data);
Example #5
0
 public CXVisitorResult VisitFields(CXFieldVisitor visitor, CXClientData clientData) => (CXVisitorResult)clang.Type_visitFields(this, visitor, clientData);