#if false using System; using System.Collections; using System.Linq; using System.Text; using System.Threading.Tasks; using Beefy.widgets; using IDE.Compiler; namespace IDE.Clang { public class ClangHelper : CompilerBase { [CallingConvention(.Stdcall), CLink] static extern IntPtr ClangHelper_Create(); [CallingConvention(.Stdcall), CLink] static extern void ClangHelper_Delete(IntPtr clangHelper); [CallingConvention(.Stdcall), CLink] static extern IntPtr ClangHelper_Classify(IntPtr clangHelper, char* fileName, void* elementTypeArray, int charLen, int cursorIdx); [CallingConvention(.Stdcall), CLink] static extern IntPtr ClangHelper_FindDefinition(IntPtr clangHelper, char* fileName, int line, int column, out int outDefLine, out int outDefColumn); [CallingConvention(.Stdcall), CLink] static extern IntPtr ClangHelper_Autocomplete(IntPtr clangHelper, char* fileName, int cursorIdx); IntPtr mNativeClangHelper; public this() { mNativeClangHelper = ClangHelper_Create(); } public ~this() { ClangHelper_Delete(mNativeClangHelper); mNativeClangHelper = IntPtr.Zero; } public string Classify(string fileName, EditWidgetContent.CharData[] charData, int cursorIdx) { fixed (EditWidgetContent.CharData* charDataPtr = charData) { IntPtr returnStringPtr = ClangHelper_Classify(mNativeClangHelper, fileName, charDataPtr, charData.Length, cursorIdx); if (returnStringPtr == IntPtr.Zero) return null; return Marshal.PtrToStringAnsi(returnStringPtr); } } public void FindDefinition(string fileName, int line, int column, out string defFileName, out int defLine, out int defColumn) { IntPtr fileNamePtr = ClangHelper_FindDefinition(mNativeClangHelper, fileName, line, column, out defLine, out defColumn); if (fileNamePtr == null) { defFileName = null; defLine = 0; defColumn = 0; return; } defFileName = Marshal.PtrToStringAnsi(fileNamePtr); } public string Autocomplete(string fileName, int cursorIdx) { IntPtr fileNamePtr = ClangHelper_Autocomplete(mNativeClangHelper, fileName, cursorIdx); if (fileNamePtr == IntPtr.Zero) return null; return Marshal.PtrToStringAnsi(fileNamePtr); } protected override void ProcessQueue() { while (true) { Command command = null; using (mMonitor.Enter()) { if (mCommandQueue.Count == 0) break; command = mCommandQueue[0]; } } } } } #endif