コード例 #1
0
 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);
     }
 }
コード例 #2
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);
            }
        }
コード例 #3
0
        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);
            }
        }
コード例 #4
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);
            }
        }