/// <summary> /// Create Native Clang Cursor And Range Visitor /// </summary> /// <param name="visitor">Managed Clang Cursor And Range Visitor Function</param> /// <returns>Native Clang Cursor And Range Visitor</returns> private CXCursorAndRangeVisitor CreateNativeCursorAndRangeVisitor(Func <object, ClangCursor, ClangSourceRange, VisitorResult> visitor) { var v = new CXCursorAndRangeVisitor((native_ctx, native_cursor, native_range) => { var cursor = native_cursor.ToManaged(); var range = native_range.ToManaged(); return(visitor(native_ctx, cursor, range)); }); return(v); }
/// <summary> /// The FindReferencesInFiles /// </summary> /// <param name="file">The file<see cref="File"/></param> /// <param name="searchFunc">The searchFunc<see cref="Func{Cursor, SourceRange, bool}"/></param> /// <returns>The <see cref="CXResult"/></returns> public CXResult FindReferencesInFiles(File file, Func <Cursor, SourceRange, bool> searchFunc) { CXCursorAndRangeVisitor cursorAndRangeVisitor = default(CXCursorAndRangeVisitor); cursorAndRangeVisitor.Visit = Marshal.GetFunctionPointerForDelegate(new visit((context, cxCursor, cxRange) => { if (searchFunc != null) { Cursor cursor = new Cursor(cxCursor); SourceRange sourceRange = new SourceRange(cxRange); bool result = searchFunc(cursor, sourceRange); return(result ? CXVisitorResult.CXVisit_Continue : CXVisitorResult.CXVisit_Break); } return(CXVisitorResult.CXVisit_Break); })); return(clang.clang_findReferencesInFile(this.m_value, (IntPtr)file.Value, cursorAndRangeVisitor)); }
internal static extern CXResult clang_findReferencesInFile(Cursor c, IntPtr f, CXCursorAndRangeVisitor visitor);