小编HJL*_*ink的帖子

如何使用Visual Studio扩展创建绿色(或蓝色)波浪装饰

我有一个Visual Studio扩展,显示红色错误波形.我也想提供其他颜色的曲线,例如黄色警告.

创建红色波浪线可以通过扩展ITagger类来完成:

internal sealed class MySquigglesTagger : ITagger<IErrorTag> {
    public IEnumerable<ITagSpan<IErrorTag>> GetTags(NormalizedSnapshotSpanCollection spans) {
        foreach (IMappingTagSpan<MyTokenTag> myTokenTag in this._aggregator.GetTags(spans))        
            SnapshotSpan tagSpan = myTokenTag.Span.GetSpans(this._sourceBuffer)[0];
            yield return new TagSpan<IErrorTag>(tagSpan, new ErrorTag("Error", "some info about the error"));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试过的:

  1. 我的直觉(错误地)说,返回一个具有不同errorType的ErrorTag可能会产生不同类型的标记,但无论你传递什么字符串,波形都会保持红色.例如.新的ErrorTag("警告")给出了红色的波浪形.MSDN文档几乎不存在.请参阅ErrorTag.
  2. Tagging命名空间中,没有提到实现ITag的不同Tag类.我希望有一个WarningTag或InfoTag.
  3. 当被问及在MSDN论坛的一个问题在这里.

问题:如何制作绿色(或蓝色或黄色)花边装饰品?可悲的是,即使是神秘或复杂的解决方案也值得赞赏......

我的目标是VS2015和VS2017.

编辑:在输入此问题时,MSDN论坛上有人回复说无法使用当前的API完成.在Visual Studio中制作黄色波浪线真的不可能吗?!

.net c# visual-studio vs-extensibility vsix

9
推荐指数
1
解决办法
562
查看次数

将真值表减少到三元逻辑运算,vpternlog

我有许多变量(7或更多)的真值表,我使用工具(例如逻辑星期五1)来简化逻辑公式.我可以手工完成,但这太容易出错了.这些公式然后转换为编译器内在函数(例如_mm_xor_epi32),它工作正常.

问题:使用vpternlog我可以进行三元逻辑运算.但我不知道一种方法来简化我的真值表到vpternlog指令序列(有些)有效.

我不是在问是否有人知道一个简化为任意三元逻辑运算的工具,虽然这很好,但我正在寻找一种方法来进行这种简化.

编辑:我问了一个关于电气工程的类似问题.

boolean-logic intrinsics truthtable avx512

9
推荐指数
2
解决办法
522
查看次数

Gnu 汇编器给出意外的内存操作数

GNU 汇编器在汇编 Intel 语法代码时给出了意外的内存操作数。

我已将 bug 减少到一行代码,在过去的三天里,我尝试了一切方法来理解为什么 GNU 汇编器会产生一些我无法理解的东西。我知道这一定(或应该)是微不足道的,但我不知所措。

以下文本位于文件 code.asm 中:

.intel_syntax noprefix
.global somecode
somecode: 
    int 3
    mov        rax,qword [rcx]
    ret
.att_syntax
Run Code Online (Sandbox Code Playgroud)

使用以下命令汇编和反汇编 code.asm:

as code.asm -o code1.obj -64 
objdump -Mintel -d code1.obj > code1.asm
Run Code Online (Sandbox Code Playgroud)

code1.asm(带有反汇编代码)的内容是:

code1.obj:     file format pe-x86-64
Disassembly of section .text:
0000000000000000 <somecode>:
   0:   cc                      int3 
   1:   48 8b 41 08             mov    rax,QWORD PTR [rcx+0x8]
   5:   c3                      ret    
Run Code Online (Sandbox Code Playgroud)

我正在使用 GNU 汇编器 (GNU Binutils) 2.25 (`x86_64-pc-cygwin')。

问题:为什么内存操作数 QWORD PTR [rcx+0x8] 中有一个额外的 1 个 qword 偏移量(8 …

assembly gnu x86-64 gnu-assembler yasm

6
推荐指数
1
解决办法
355
查看次数

线路旅行推销员 (TSP)、扫雪

在典型的 TSP 算法中,我们有多个,并且希望以最佳的行进顺序行进。点是家庭、顾客等,基本上是地图上的一个点。

我用线代替点。扫雪就是一个很好的例子,你可以在多条街道上行驶。最大的区别是,对于每次旅行,结束点与起点不同。我的尝试是假设起点作为每次旅行的唯一节点。但显然,每当你的路线/线路很长时,你最终都会到达距离起点很远的地方。而且这个解决方案已经远非最佳了。

我查看了一些提供路线优化的公司。他们的解决方案就是将线分成接近的点;并将每条线视为彼此靠近的节点。我认为当你必须穿过街道的两侧,或者每当你靠近另一条街道时,这是行不通的。

我想知道是否有建模技巧或其他方法来解决这个问题?

在此输入图像描述

algorithm mathematical-optimization traveling-salesman

5
推荐指数
1
解决办法
856
查看次数

在quickInfoContent中使用UserControl时,QuickInfoSession会过早被取消

首先是一些样板代码; 问题如下.

我有一个标准的QuickInfoSourceProvider:

[Export(typeof(IIntellisenseControllerProvider))]
internal sealed class QuickInfoControllerProvider : IIntellisenseControllerProvider
{
    [Import]
    private IQuickInfoBroker _quickInfoBroker = null;

    public IIntellisenseController TryCreateIntellisenseController(ITextView textView, IList<ITextBuffer> subjectBuffers)
    {
        return new QuickInfoController(textView, subjectBuffers, this._quickInfoBroker);
    }
}
Run Code Online (Sandbox Code Playgroud)

和标准的QuickInfoController:

internal sealed class QuickInfoController : IIntellisenseController
{
    private readonly IList<ITextBuffer> _subjectBuffers;
    private readonly IQuickInfoBroker _quickInfoBroker;
    private ITextView _textView;

    internal QuickInfoController(
        ITextView textView,
        IList<ITextBuffer> subjectBuffers,
        IQuickInfoBroker quickInfoBroker)
    {
        this._textView = textView;
        this._subjectBuffers = subjectBuffers;
        this._quickInfoBroker = quickInfoBroker;
        this._textView.MouseHover += (o, e) => {
            SnapshotPoint? point = GetMousePosition(new SnapshotPoint(this._textView.TextSnapshot, e.Position)); …
Run Code Online (Sandbox Code Playgroud)

c# wpf visual-studio vsix

5
推荐指数
0
解决办法
161
查看次数

Visual Studio 中的“其他模块依赖项”和“其他 BMI 目录”设置

假设我有两个模块 - Module1、Module2。每个模块在 Visual Studio 中都有自己的项目。如何使用“其他模块依赖项”或“其他 BMI 目录”设置将 Module2 导入到 Module1 中?

问题:Visual Studio (2019/2022) 无法从 Module2 中找到任何符号。

将 Module2 的引用添加到 Module1 中没有帮助。

https://devblogs.microsoft.com/cppblog/a-tour-of-cpp-modules-in-visual-studio/没有多大帮助

c++ module visual-studio c++20

5
推荐指数
1
解决办法
1448
查看次数

如何指示 MS Visual C++ 编译器使用未初始化的 __m512i 寄存器

如何指示 Visual C++ 编译器 (1926) 使用未初始化的__m512i寄存器。在下面的代码片段not(or(A,B))中计算了a ,内容dummy无关紧要。

__m512i dummy;
const __m512i n8 = _mm512_ternarylogic_epi64(dummy, A, B, 0x11);
Run Code Online (Sandbox Code Playgroud)

不知何故,编译器假定寄存器需要有一些内容,(它没有),并为以下生成昂贵且不必要的内存引用zmm0

62 F1 7E 48 6F 45 00 vmovdqu32   zmm0,zmmword ptr [rbp]  
62 F3 DD 48 25 C5 11 vpternlogq  zmm0,zmm4,zmm5,11h  
Run Code Online (Sandbox Code Playgroud)

ICC 19.0.1 了解这种情况并且不会生成vmovdqu32.

我试过什么:dummy用 0初始化替换为vmovdqu32

C5 F1 EF C9          vpxor       xmm1,xmm1,xmm1
Run Code Online (Sandbox Code Playgroud)

这仍然给出了不必要的指令和停顿。

因此问题是:如何指示 Visual C++ 编译器执行与 Intel 编译器相同的操作?只是不要初始化虚拟寄存器。

c++ intrinsics micro-optimization visual-c++ avx512

4
推荐指数
1
解决办法
91
查看次数

go struct 与泛型实现可比较

考虑版本 go1.18beta2 linux/amd64 的以下代码片段

\n
    type Vector[T comparable] struct {\n       data_ []T\n    }\n    \n    func (v *Vector[T]) Contains(e T) bool {\n       for _, x := range v.data_ {\n          if x == e {\n             return true\n          }\n       }\n       return false\n    }\n    \n    func TestVector(t *testing.T) {\n       v2 := Vector[Vector[int]]{}\n    }\n
Run Code Online (Sandbox Code Playgroud)\n

这不会编译并给出错误:\xe2\x80\x9cVector[int] does not implement comparable\xe2\x80\x9d只是因为Vector没有定义相等运算符。但是,我找不到如何定义它们。

\n

问题:这种创建可比较结构的方法是否不允许,为什么?或者文档还没有写好?

\n

generics go

3
推荐指数
1
解决办法
7187
查看次数