/// <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); } }
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); }
/// <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); }
internal static extern uint clang_Type_visitFields(CXType type, CXFieldVisitor visitor, CXClientData client_data);
public CXVisitorResult VisitFields(CXFieldVisitor visitor, CXClientData clientData) => (CXVisitorResult)clang.Type_visitFields(this, visitor, clientData);