public bool TryIndexTranslationUnit(CXClientData clientData, ReadOnlySpan <IndexerCallbacks> indexCallbacks, CXIndexOptFlags indexOptions, CXTranslationUnit tu) { fixed(IndexerCallbacks *pIndexCallbacks = indexCallbacks) { return(clang.indexTranslationUnit(this, clientData, pIndexCallbacks, (uint)indexCallbacks.Length, (uint)indexOptions, tu) == 0); } }
/// <summary> /// The IndexSourceFile /// </summary> /// <param name="sourceFile">The sourceFile<see cref="string"/></param> /// <param name="commandLineArgs">The commandLineArgs<see cref="string[]"/></param> /// <param name="unsavedFiles">The unsavedFiles<see cref="UnsavedFile[]"/></param> /// <param name="indexOptFlags">The indexOptFlags<see cref="CXIndexOptFlags"/></param> /// <param name="translationUnit_Flags">The translationUnit_Flags<see cref="CXTranslationUnit_Flags"/></param> /// <param name="errorCode">The errorCode<see cref="CXErrorCode"/></param> /// <returns>The <see cref="CXErrorCode"/></returns> public TranslationUnit IndexSourceFile(string sourceFile, string[] commandLineArgs, UnsavedFile[] unsavedFiles, CXIndexOptFlags indexOptFlags, CXTranslationUnit_Flags translationUnit_Flags, out CXErrorCode errorCode) { TranslationUnit translationUnit = null; string[] commandLineArgsArray = commandLineArgs; UnsavedFile[] unsavedFilesArray = unsavedFiles; if (commandLineArgsArray == null) { commandLineArgsArray = new string[0]; } if (unsavedFilesArray == null) { unsavedFilesArray = new UnsavedFile[0]; } using (Pointer <IndexerCallbacks> ptrIndexerCallbacks = new Pointer <IndexerCallbacks>(this._indexerCallbacks)) { IntPtr pTU = IntPtr.Zero; errorCode = (CXErrorCode)clang.clang_indexSourceFile(this.m_value, IntPtr.Zero, ptrIndexerCallbacks, (uint)(ptrIndexerCallbacks.Size), (uint)indexOptFlags, sourceFile, commandLineArgsArray, commandLineArgsArray.Length, unsavedFilesArray.Select(x => (CXUnsavedFile)x.Value).ToArray(), (uint)unsavedFilesArray.Length, out pTU, (uint)translationUnit_Flags ); if (pTU != IntPtr.Zero) { translationUnit = new TranslationUnit(pTU); } return(translationUnit); } }
public bool TryIndexSourceFileFullArgv(CXClientData clientData, ReadOnlySpan <IndexerCallbacks> indexCallbacks, CXIndexOptFlags indexOptions, string sourceFilename, ReadOnlySpan <string> commandLineArgs, ReadOnlySpan <CXUnsavedFile> unsavedFiles, out CXTranslationUnit tu, CXTranslationUnit_Flags tuOptions) { using var marshaledSourceFilename = new MarshaledString(sourceFilename); using var marshaledCommandLineArgs = new MarshaledStringArray(commandLineArgs); fixed(IndexerCallbacks *pIndexCallbacks = indexCallbacks) fixed(CXUnsavedFile * pUnsavedFiles = unsavedFiles) fixed(CXTranslationUnit * pTU = &tu) { var pCommandLineArgs = stackalloc sbyte *[commandLineArgs.Length]; marshaledCommandLineArgs.Fill(pCommandLineArgs); return(clang.indexSourceFileFullArgv(this, clientData, pIndexCallbacks, (uint)indexCallbacks.Length, (uint)indexOptions, marshaledSourceFilename, pCommandLineArgs, commandLineArgs.Length, pUnsavedFiles, (uint)unsavedFiles.Length, (CXTranslationUnitImpl **)pTU, (uint)tuOptions) == 0); } }
/// <summary> /// The Index /// </summary> /// <param name="translationUnit">The translationUnit<see cref="TranslationUnit"/></param> /// <param name="indexOptFlags">The indexOptFlags<see cref="CXIndexOptFlags"/></param> /// <returns>The <see cref="CXErrorCode"/></returns> public unsafe CXErrorCode Index(TranslationUnit translationUnit, object param, CXIndexOptFlags indexOptFlags) { if (param == null) { throw new ArgumentNullException("param"); } GCHandle paramGCHandle = GCHandle.Alloc(param, GCHandleType.Weak); using (Pointer <IndexerCallbacks> ptrIndexerCallbacks = new Pointer <IndexerCallbacks>(this._indexerCallbacks)) { CXErrorCode errorCode = (CXErrorCode)clang.clang_indexTranslationUnit(this.m_value, GCHandle.ToIntPtr(paramGCHandle), ptrIndexerCallbacks, (uint)(ptrIndexerCallbacks.Size), (uint)indexOptFlags, (IntPtr)translationUnit.Value); paramGCHandle.Free(); return(errorCode); } }