MaskRay added inline comments.

================
Comment at: clangd/FuzzyMatch.cpp:340
+  A[WordN] = Miss;
+  for (int I = WordN, P = PatN; I > 0; I--) {
+    if (I == W)
----------------
sammccall wrote:
> MaskRay wrote:
> > sammccall wrote:
> > > sammccall wrote:
> > > > sammccall wrote:
> > > > > W is the right name in this file for a variable iterating over word 
> > > > > indices, please don't change this.
> > > > > The new variable above could be EndW or so?
> > > > As far as I can see, this loop is setting `A[W+1:...] = Miss` and 
> > > > populating `A[0...W]` with the exsting logic.
> > > > I think this would be clearer as two loops, currently there's a lot of 
> > > > conditionals around Last that obscure what's actually happening.
> > > You've shifted P (and the old W, new I) by 1. This does reduce the number 
> > > of +1 and -1 in this function, but it's inconsistent with how these are 
> > > used elsewhere: P should be the index into Pat of the character that 
> > > we're considering.
> > I don't understand the rationale not to use the shifted indices. The code 
> > actually use `Scores[P][W][*]` to mean the optimal match of the first `P` 
> > characters of the pattern with the first `W` characters of the word, not 
> > the position of the character.
> > 
> > On the other hand, C++ reverse iterators use the shifted one for `for (I = 
> > rend(); I != rbegin(); ++I)`. The shifted one makes ending condition check 
> > easier.
> > I don't understand the rationale not to use the shifted indices
> The rationale is entirely consistency with the surrounding code. The 
> consistency helps avoid off-by-one errors when similar loops have different 
> conventions.
> 
> In this file, when looping over word or pattern dimensions, P and W 
> respectively are used for loop variables, and can be interpreted as indices 
> into Pat/Word.
> Here the interpretation would be "did we match or miss character Word[W]"
`Scores[P][W][*]` is interpreted as how good it is if we align the first `P` 
characters of the pattern with the first `W` characters of the word.

Note the code uses `number of characters` instead of the position.

Here the new interpretation would be "what we should do for the last character 
of the first W characters"


Repository:
  rCTE Clang Tools Extra

https://reviews.llvm.org/D44720



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to