Browse code

vendor: remove vendored golang.org/x/tools, as it's not needed

This dependency was added in 6cdbf07be9d0ad08776df0b65fb1b3e4e617c42a,
but looks like the code was vendored manually, or vendored, then removeed
from vendor.conf.

This commit removes the vendored files, as they are not needed to build
our binaries.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>

Sebastiaan van Stijn authored on 2020/12/03 22:00:15
Showing 11 changed files
1 1
deleted file mode 100644
... ...
@@ -1,27 +0,0 @@
1
-Copyright (c) 2009 The Go Authors. All rights reserved.
2
-
3
-Redistribution and use in source and binary forms, with or without
4
-modification, are permitted provided that the following conditions are
5
-met:
6
-
7
-   * Redistributions of source code must retain the above copyright
8
-notice, this list of conditions and the following disclaimer.
9
-   * Redistributions in binary form must reproduce the above
10
-copyright notice, this list of conditions and the following disclaimer
11
-in the documentation and/or other materials provided with the
12
-distribution.
13
-   * Neither the name of Google Inc. nor the names of its
14
-contributors may be used to endorse or promote products derived from
15
-this software without specific prior written permission.
16
-
17
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 1
deleted file mode 100644
... ...
@@ -1,22 +0,0 @@
1
-Additional IP Rights Grant (Patents)
2
-
3
-"This implementation" means the copyrightable works distributed by
4
-Google as part of the Go project.
5
-
6
-Google hereby grants to You a perpetual, worldwide, non-exclusive,
7
-no-charge, royalty-free, irrevocable (except as stated in this section)
8
-patent license to make, have made, use, offer to sell, sell, import,
9
-transfer and otherwise run, modify and propagate the contents of this
10
-implementation of Go, where such license applies only to those patent
11
-claims, both currently owned or controlled by Google and acquired in
12
-the future, licensable by Google that are necessarily infringed by this
13
-implementation of Go.  This grant does not include claims that would be
14
-infringed only as a consequence of further modification of this
15
-implementation.  If you or your agent or exclusive licensee institute or
16
-order or agree to the institution of patent litigation against any
17
-entity (including a cross-claim or counterclaim in a lawsuit) alleging
18
-that this implementation of Go or any code incorporated within this
19
-implementation of Go constitutes direct or contributory patent
20
-infringement, or inducement of patent infringement, then any patent
21
-rights granted to you under this License for this implementation of Go
22
-shall terminate as of the date such litigation is filed.
23 1
deleted file mode 100644
... ...
@@ -1,27 +0,0 @@
1
-# Go Tools
2
-
3
-This subrepository holds the source for various packages and tools that support
4
-the Go programming language.
5
-
6
-Some of the tools, `godoc` and `vet` for example, are included in binary Go
7
-distributions.
8
-
9
-Others, including the Go `guru` and the test coverage tool, can be fetched with
10
-`go get`.
11
-
12
-Packages include a type-checker for Go and an implementation of the
13
-Static Single Assignment form (SSA) representation for Go programs.
14
-
15
-## Download/Install
16
-
17
-The easiest way to install is to run `go get -u golang.org/x/tools/...`. You can
18
-also manually git clone the repository to `$GOPATH/src/golang.org/x/tools`.
19
-
20
-## Report Issues / Send Patches
21
-
22
-This repository uses Gerrit for code changes. To learn how to submit changes to
23
-this repository, see https://golang.org/doc/contribute.html.
24
-
25
-The main issue tracker for the tools repository is located at
26
-https://github.com/golang/go/issues. Prefix your issue with "x/tools/(your
27
-subdir):" in the subject line, so it is easy to find.
28 1
deleted file mode 100644
... ...
@@ -1,20 +0,0 @@
1
-// Copyright 2015 The Go Authors. All rights reserved.
2
-// Use of this source code is governed by a BSD-style
3
-// license that can be found in the LICENSE file.
4
-
5
-// +build amd64,!appengine,!gccgo
6
-
7
-package intsets
8
-
9
-func popcnt(x word) int
10
-func havePOPCNT() bool
11
-
12
-var hasPOPCNT = havePOPCNT()
13
-
14
-// popcount returns the population count (number of set bits) of x.
15
-func popcount(x word) int {
16
-	if hasPOPCNT {
17
-		return popcnt(x)
18
-	}
19
-	return popcountTable(x) // faster than Hacker's Delight
20
-}
21 1
deleted file mode 100644
... ...
@@ -1,30 +0,0 @@
1
-// Copyright 2015 The Go Authors. All rights reserved.
2
-// Use of this source code is governed by a BSD-style
3
-// license that can be found in the LICENSE file.
4
-
5
-// +build amd64,!appengine,!gccgo
6
-
7
-#include "textflag.h"
8
-
9
-// func havePOPCNT() bool
10
-TEXT ·havePOPCNT(SB),4,$0
11
-	MOVQ	$1, AX
12
-	CPUID
13
-	SHRQ	$23, CX
14
-	ANDQ	$1, CX
15
-	MOVB	CX, ret+0(FP)
16
-	RET
17
-
18
-// func popcnt(word) int
19
-TEXT ·popcnt(SB),NOSPLIT,$0-8
20
-	XORQ	AX, AX
21
-	MOVQ	x+0(FP), SI
22
-	// POPCNT (SI), AX is not recognized by Go assembler,
23
-	// so we assemble it ourselves.
24
-	BYTE	$0xf3
25
-	BYTE	$0x48
26
-	BYTE	$0x0f
27
-	BYTE	$0xb8
28
-	BYTE	$0xc6
29
-	MOVQ	AX, ret+8(FP)
30
-	RET
31 1
deleted file mode 100644
... ...
@@ -1,9 +0,0 @@
1
-// Copyright 2015 The Go Authors.  All rights reserved.
2
-// Use of this source code is governed by a BSD-style
3
-// license that can be found in the LICENSE file.
4
-
5
-// +build gccgo
6
-
7
-package intsets
8
-
9
-func popcount(x word) int
10 1
deleted file mode 100644
... ...
@@ -1,19 +0,0 @@
1
-// Copyright 2015 The Go Authors.  All rights reserved.
2
-// Use of this source code is governed by a BSD-style
3
-// license that can be found in the LICENSE file.
4
-
5
-// +build gccgo
6
-
7
-#include <errno.h>
8
-#include <stdint.h>
9
-#include <unistd.h>
10
-
11
-#define _STRINGIFY2_(x) #x
12
-#define _STRINGIFY_(x) _STRINGIFY2_(x)
13
-#define GOSYM_PREFIX _STRINGIFY_(__USER_LABEL_PREFIX__)
14
-
15
-extern intptr_t popcount(uintptr_t x) __asm__(GOSYM_PREFIX GOPKGPATH ".popcount");
16
-
17
-intptr_t popcount(uintptr_t x) {
18
-	return __builtin_popcountl((unsigned long)(x));
19
-}
20 1
deleted file mode 100644
... ...
@@ -1,33 +0,0 @@
1
-// Copyright 2015 The Go Authors. All rights reserved.
2
-// Use of this source code is governed by a BSD-style
3
-// license that can be found in the LICENSE file.
4
-
5
-// +build !amd64 appengine
6
-// +build !gccgo
7
-
8
-package intsets
9
-
10
-import "runtime"
11
-
12
-// We compared three algorithms---Hacker's Delight, table lookup,
13
-// and AMD64's SSE4.1 hardware POPCNT---on a 2.67GHz Xeon X5550.
14
-//
15
-// % GOARCH=amd64 go test -run=NONE -bench=Popcount
16
-// POPCNT               5.12 ns/op
17
-// Table                8.53 ns/op
18
-// HackersDelight       9.96 ns/op
19
-//
20
-// % GOARCH=386 go test -run=NONE -bench=Popcount
21
-// Table               10.4  ns/op
22
-// HackersDelight       5.23 ns/op
23
-//
24
-// (AMD64's ABM1 hardware supports ntz and nlz too,
25
-// but they aren't critical.)
26
-
27
-// popcount returns the population count (number of set bits) of x.
28
-func popcount(x word) int {
29
-	if runtime.GOARCH == "386" {
30
-		return popcountHD(uint32(x))
31
-	}
32
-	return popcountTable(x)
33
-}
34 1
deleted file mode 100644
... ...
@@ -1,1091 +0,0 @@
1
-// Copyright 2014 The Go Authors. All rights reserved.
2
-// Use of this source code is governed by a BSD-style
3
-// license that can be found in the LICENSE file.
4
-
5
-// Package intsets provides Sparse, a compact and fast representation
6
-// for sparse sets of int values.
7
-//
8
-// The time complexity of the operations Len, Insert, Remove and Has
9
-// is in O(n) but in practice those methods are faster and more
10
-// space-efficient than equivalent operations on sets based on the Go
11
-// map type.  The IsEmpty, Min, Max, Clear and TakeMin operations
12
-// require constant time.
13
-//
14
-package intsets // import "golang.org/x/tools/container/intsets"
15
-
16
-// TODO(adonovan):
17
-// - Add InsertAll(...int), RemoveAll(...int)
18
-// - Add 'bool changed' results for {Intersection,Difference}With too.
19
-//
20
-// TODO(adonovan): implement Dense, a dense bit vector with a similar API.
21
-// The space usage would be proportional to Max(), not Len(), and the
22
-// implementation would be based upon big.Int.
23
-//
24
-// TODO(adonovan): opt: make UnionWith and Difference faster.
25
-// These are the hot-spots for go/pointer.
26
-
27
-import (
28
-	"bytes"
29
-	"fmt"
30
-)
31
-
32
-// A Sparse is a set of int values.
33
-// Sparse operations (even queries) are not concurrency-safe.
34
-//
35
-// The zero value for Sparse is a valid empty set.
36
-//
37
-// Sparse sets must be copied using the Copy method, not by assigning
38
-// a Sparse value.
39
-//
40
-type Sparse struct {
41
-	// An uninitialized Sparse represents an empty set.
42
-	// An empty set may also be represented by
43
-	//  root.next == root.prev == &root.
44
-	//
45
-	// The root is always the block with the smallest offset.
46
-	// It can be empty, but only if it is the only block; in that case, offset is
47
-	// MaxInt (which is not a valid offset).
48
-	root block
49
-}
50
-
51
-type word uintptr
52
-
53
-const (
54
-	_m            = ^word(0)
55
-	bitsPerWord   = 8 << (_m>>8&1 + _m>>16&1 + _m>>32&1)
56
-	bitsPerBlock  = 256 // optimal value for go/pointer solver performance
57
-	wordsPerBlock = bitsPerBlock / bitsPerWord
58
-)
59
-
60
-// Limit values of implementation-specific int type.
61
-const (
62
-	MaxInt = int(^uint(0) >> 1)
63
-	MinInt = -MaxInt - 1
64
-)
65
-
66
-// -- block ------------------------------------------------------------
67
-
68
-// A set is represented as a circular doubly-linked list of blocks,
69
-// each containing an offset and a bit array of fixed size
70
-// bitsPerBlock; the blocks are ordered by increasing offset.
71
-//
72
-// The set contains an element x iff the block whose offset is x - (x
73
-// mod bitsPerBlock) has the bit (x mod bitsPerBlock) set, where mod
74
-// is the Euclidean remainder.
75
-//
76
-// A block may only be empty transiently.
77
-//
78
-type block struct {
79
-	offset     int                 // offset mod bitsPerBlock == 0
80
-	bits       [wordsPerBlock]word // contains at least one set bit
81
-	next, prev *block              // doubly-linked list of blocks
82
-}
83
-
84
-// wordMask returns the word index (in block.bits)
85
-// and single-bit mask for the block's ith bit.
86
-func wordMask(i uint) (w uint, mask word) {
87
-	w = i / bitsPerWord
88
-	mask = 1 << (i % bitsPerWord)
89
-	return
90
-}
91
-
92
-// insert sets the block b's ith bit and
93
-// returns true if it was not already set.
94
-//
95
-func (b *block) insert(i uint) bool {
96
-	w, mask := wordMask(i)
97
-	if b.bits[w]&mask == 0 {
98
-		b.bits[w] |= mask
99
-		return true
100
-	}
101
-	return false
102
-}
103
-
104
-// remove clears the block's ith bit and
105
-// returns true if the bit was previously set.
106
-// NB: may leave the block empty.
107
-//
108
-func (b *block) remove(i uint) bool {
109
-	w, mask := wordMask(i)
110
-	if b.bits[w]&mask != 0 {
111
-		b.bits[w] &^= mask
112
-		return true
113
-	}
114
-	return false
115
-}
116
-
117
-// has reports whether the block's ith bit is set.
118
-func (b *block) has(i uint) bool {
119
-	w, mask := wordMask(i)
120
-	return b.bits[w]&mask != 0
121
-}
122
-
123
-// empty reports whether b.len()==0, but more efficiently.
124
-func (b *block) empty() bool {
125
-	for _, w := range b.bits {
126
-		if w != 0 {
127
-			return false
128
-		}
129
-	}
130
-	return true
131
-}
132
-
133
-// len returns the number of set bits in block b.
134
-func (b *block) len() int {
135
-	var l int
136
-	for _, w := range b.bits {
137
-		l += popcount(w)
138
-	}
139
-	return l
140
-}
141
-
142
-// max returns the maximum element of the block.
143
-// The block must not be empty.
144
-func (b *block) max() int {
145
-	bi := b.offset + bitsPerBlock
146
-	// Decrement bi by number of high zeros in last.bits.
147
-	for i := len(b.bits) - 1; i >= 0; i-- {
148
-		if w := b.bits[i]; w != 0 {
149
-			return bi - nlz(w) - 1
150
-		}
151
-		bi -= bitsPerWord
152
-	}
153
-	panic("BUG: empty block")
154
-}
155
-
156
-// min returns the minimum element of the block,
157
-// and also removes it if take is set.
158
-// The block must not be initially empty.
159
-// NB: may leave the block empty.
160
-func (b *block) min(take bool) int {
161
-	for i, w := range b.bits {
162
-		if w != 0 {
163
-			tz := ntz(w)
164
-			if take {
165
-				b.bits[i] = w &^ (1 << uint(tz))
166
-			}
167
-			return b.offset + int(i*bitsPerWord) + tz
168
-		}
169
-	}
170
-	panic("BUG: empty block")
171
-}
172
-
173
-// lowerBound returns the smallest element of the block that is greater than or
174
-// equal to the element corresponding to the ith bit. If there is no such
175
-// element, the second return value is false.
176
-func (b *block) lowerBound(i uint) (int, bool) {
177
-	w := i / bitsPerWord
178
-	bit := i % bitsPerWord
179
-
180
-	if val := b.bits[w] >> bit; val != 0 {
181
-		return b.offset + int(i) + ntz(val), true
182
-	}
183
-
184
-	for w++; w < wordsPerBlock; w++ {
185
-		if val := b.bits[w]; val != 0 {
186
-			return b.offset + int(w*bitsPerWord) + ntz(val), true
187
-		}
188
-	}
189
-
190
-	return 0, false
191
-}
192
-
193
-// forEach calls f for each element of block b.
194
-// f must not mutate b's enclosing Sparse.
195
-func (b *block) forEach(f func(int)) {
196
-	for i, w := range b.bits {
197
-		offset := b.offset + i*bitsPerWord
198
-		for bi := 0; w != 0 && bi < bitsPerWord; bi++ {
199
-			if w&1 != 0 {
200
-				f(offset)
201
-			}
202
-			offset++
203
-			w >>= 1
204
-		}
205
-	}
206
-}
207
-
208
-// offsetAndBitIndex returns the offset of the block that would
209
-// contain x and the bit index of x within that block.
210
-//
211
-func offsetAndBitIndex(x int) (int, uint) {
212
-	mod := x % bitsPerBlock
213
-	if mod < 0 {
214
-		// Euclidean (non-negative) remainder
215
-		mod += bitsPerBlock
216
-	}
217
-	return x - mod, uint(mod)
218
-}
219
-
220
-// -- Sparse --------------------------------------------------------------
221
-
222
-// none is a shared, empty, sentinel block that indicates the end of a block
223
-// list.
224
-var none block
225
-
226
-// Dummy type used to generate an implicit panic. This must be defined at the
227
-// package level; if it is defined inside a function, it prevents the inlining
228
-// of that function.
229
-type to_copy_a_sparse_you_must_call_its_Copy_method struct{}
230
-
231
-// init ensures s is properly initialized.
232
-func (s *Sparse) init() {
233
-	root := &s.root
234
-	if root.next == nil {
235
-		root.offset = MaxInt
236
-		root.next = root
237
-		root.prev = root
238
-	} else if root.next.prev != root {
239
-		// Copying a Sparse x leads to pernicious corruption: the
240
-		// new Sparse y shares the old linked list, but iteration
241
-		// on y will never encounter &y.root so it goes into a
242
-		// loop.  Fail fast before this occurs.
243
-		// We don't want to call panic here because it prevents the
244
-		// inlining of this function.
245
-		_ = (interface{}(nil)).(to_copy_a_sparse_you_must_call_its_Copy_method)
246
-	}
247
-}
248
-
249
-func (s *Sparse) first() *block {
250
-	s.init()
251
-	if s.root.offset == MaxInt {
252
-		return &none
253
-	}
254
-	return &s.root
255
-}
256
-
257
-// next returns the next block in the list, or end if b is the last block.
258
-func (s *Sparse) next(b *block) *block {
259
-	if b.next == &s.root {
260
-		return &none
261
-	}
262
-	return b.next
263
-}
264
-
265
-// prev returns the previous block in the list, or end if b is the first block.
266
-func (s *Sparse) prev(b *block) *block {
267
-	if b.prev == &s.root {
268
-		return &none
269
-	}
270
-	return b.prev
271
-}
272
-
273
-// IsEmpty reports whether the set s is empty.
274
-func (s *Sparse) IsEmpty() bool {
275
-	return s.root.next == nil || s.root.offset == MaxInt
276
-}
277
-
278
-// Len returns the number of elements in the set s.
279
-func (s *Sparse) Len() int {
280
-	var l int
281
-	for b := s.first(); b != &none; b = s.next(b) {
282
-		l += b.len()
283
-	}
284
-	return l
285
-}
286
-
287
-// Max returns the maximum element of the set s, or MinInt if s is empty.
288
-func (s *Sparse) Max() int {
289
-	if s.IsEmpty() {
290
-		return MinInt
291
-	}
292
-	return s.root.prev.max()
293
-}
294
-
295
-// Min returns the minimum element of the set s, or MaxInt if s is empty.
296
-func (s *Sparse) Min() int {
297
-	if s.IsEmpty() {
298
-		return MaxInt
299
-	}
300
-	return s.root.min(false)
301
-}
302
-
303
-// LowerBound returns the smallest element >= x, or MaxInt if there is no such
304
-// element.
305
-func (s *Sparse) LowerBound(x int) int {
306
-	offset, i := offsetAndBitIndex(x)
307
-	for b := s.first(); b != &none; b = s.next(b) {
308
-		if b.offset > offset {
309
-			return b.min(false)
310
-		}
311
-		if b.offset == offset {
312
-			if y, ok := b.lowerBound(i); ok {
313
-				return y
314
-			}
315
-		}
316
-	}
317
-	return MaxInt
318
-}
319
-
320
-// block returns the block that would contain offset,
321
-// or nil if s contains no such block.
322
-// Precondition: offset is a multiple of bitsPerBlock.
323
-func (s *Sparse) block(offset int) *block {
324
-	for b := s.first(); b != &none && b.offset <= offset; b = s.next(b) {
325
-		if b.offset == offset {
326
-			return b
327
-		}
328
-	}
329
-	return nil
330
-}
331
-
332
-// Insert adds x to the set s, and reports whether the set grew.
333
-func (s *Sparse) Insert(x int) bool {
334
-	offset, i := offsetAndBitIndex(x)
335
-
336
-	b := s.first()
337
-	for ; b != &none && b.offset <= offset; b = s.next(b) {
338
-		if b.offset == offset {
339
-			return b.insert(i)
340
-		}
341
-	}
342
-
343
-	// Insert new block before b.
344
-	new := s.insertBlockBefore(b)
345
-	new.offset = offset
346
-	return new.insert(i)
347
-}
348
-
349
-// removeBlock removes a block and returns the block that followed it (or end if
350
-// it was the last block).
351
-func (s *Sparse) removeBlock(b *block) *block {
352
-	if b != &s.root {
353
-		b.prev.next = b.next
354
-		b.next.prev = b.prev
355
-		if b.next == &s.root {
356
-			return &none
357
-		}
358
-		return b.next
359
-	}
360
-
361
-	first := s.root.next
362
-	if first == &s.root {
363
-		// This was the only block.
364
-		s.Clear()
365
-		return &none
366
-	}
367
-	s.root.offset = first.offset
368
-	s.root.bits = first.bits
369
-	if first.next == &s.root {
370
-		// Single block remaining.
371
-		s.root.next = &s.root
372
-		s.root.prev = &s.root
373
-	} else {
374
-		s.root.next = first.next
375
-		first.next.prev = &s.root
376
-	}
377
-	return &s.root
378
-}
379
-
380
-// Remove removes x from the set s, and reports whether the set shrank.
381
-func (s *Sparse) Remove(x int) bool {
382
-	offset, i := offsetAndBitIndex(x)
383
-	if b := s.block(offset); b != nil {
384
-		if !b.remove(i) {
385
-			return false
386
-		}
387
-		if b.empty() {
388
-			s.removeBlock(b)
389
-		}
390
-		return true
391
-	}
392
-	return false
393
-}
394
-
395
-// Clear removes all elements from the set s.
396
-func (s *Sparse) Clear() {
397
-	s.root = block{
398
-		offset: MaxInt,
399
-		next:   &s.root,
400
-		prev:   &s.root,
401
-	}
402
-}
403
-
404
-// If set s is non-empty, TakeMin sets *p to the minimum element of
405
-// the set s, removes that element from the set and returns true.
406
-// Otherwise, it returns false and *p is undefined.
407
-//
408
-// This method may be used for iteration over a worklist like so:
409
-//
410
-// 	var x int
411
-// 	for worklist.TakeMin(&x) { use(x) }
412
-//
413
-func (s *Sparse) TakeMin(p *int) bool {
414
-	if s.IsEmpty() {
415
-		return false
416
-	}
417
-	*p = s.root.min(true)
418
-	if s.root.empty() {
419
-		s.removeBlock(&s.root)
420
-	}
421
-	return true
422
-}
423
-
424
-// Has reports whether x is an element of the set s.
425
-func (s *Sparse) Has(x int) bool {
426
-	offset, i := offsetAndBitIndex(x)
427
-	if b := s.block(offset); b != nil {
428
-		return b.has(i)
429
-	}
430
-	return false
431
-}
432
-
433
-// forEach applies function f to each element of the set s in order.
434
-//
435
-// f must not mutate s.  Consequently, forEach is not safe to expose
436
-// to clients.  In any case, using "range s.AppendTo()" allows more
437
-// natural control flow with continue/break/return.
438
-//
439
-func (s *Sparse) forEach(f func(int)) {
440
-	for b := s.first(); b != &none; b = s.next(b) {
441
-		b.forEach(f)
442
-	}
443
-}
444
-
445
-// Copy sets s to the value of x.
446
-func (s *Sparse) Copy(x *Sparse) {
447
-	if s == x {
448
-		return
449
-	}
450
-
451
-	xb := x.first()
452
-	sb := s.first()
453
-	for xb != &none {
454
-		if sb == &none {
455
-			sb = s.insertBlockBefore(sb)
456
-		}
457
-		sb.offset = xb.offset
458
-		sb.bits = xb.bits
459
-		xb = x.next(xb)
460
-		sb = s.next(sb)
461
-	}
462
-	s.discardTail(sb)
463
-}
464
-
465
-// insertBlockBefore returns a new block, inserting it before next.
466
-// If next is the root, the root is replaced. If next is end, the block is
467
-// inserted at the end.
468
-func (s *Sparse) insertBlockBefore(next *block) *block {
469
-	if s.IsEmpty() {
470
-		if next != &none {
471
-			panic("BUG: passed block with empty set")
472
-		}
473
-		return &s.root
474
-	}
475
-
476
-	if next == &s.root {
477
-		// Special case: we need to create a new block that will become the root
478
-		// block.The old root block becomes the second block.
479
-		second := s.root
480
-		s.root = block{
481
-			next: &second,
482
-		}
483
-		if second.next == &s.root {
484
-			s.root.prev = &second
485
-		} else {
486
-			s.root.prev = second.prev
487
-			second.next.prev = &second
488
-			second.prev = &s.root
489
-		}
490
-		return &s.root
491
-	}
492
-	if next == &none {
493
-		// Insert before root.
494
-		next = &s.root
495
-	}
496
-	b := new(block)
497
-	b.next = next
498
-	b.prev = next.prev
499
-	b.prev.next = b
500
-	next.prev = b
501
-	return b
502
-}
503
-
504
-// discardTail removes block b and all its successors from s.
505
-func (s *Sparse) discardTail(b *block) {
506
-	if b != &none {
507
-		if b == &s.root {
508
-			s.Clear()
509
-		} else {
510
-			b.prev.next = &s.root
511
-			s.root.prev = b.prev
512
-		}
513
-	}
514
-}
515
-
516
-// IntersectionWith sets s to the intersection s ∩ x.
517
-func (s *Sparse) IntersectionWith(x *Sparse) {
518
-	if s == x {
519
-		return
520
-	}
521
-
522
-	xb := x.first()
523
-	sb := s.first()
524
-	for xb != &none && sb != &none {
525
-		switch {
526
-		case xb.offset < sb.offset:
527
-			xb = x.next(xb)
528
-
529
-		case xb.offset > sb.offset:
530
-			sb = s.removeBlock(sb)
531
-
532
-		default:
533
-			var sum word
534
-			for i := range sb.bits {
535
-				r := xb.bits[i] & sb.bits[i]
536
-				sb.bits[i] = r
537
-				sum |= r
538
-			}
539
-			if sum != 0 {
540
-				sb = s.next(sb)
541
-			} else {
542
-				// sb will be overwritten or removed
543
-			}
544
-
545
-			xb = x.next(xb)
546
-		}
547
-	}
548
-
549
-	s.discardTail(sb)
550
-}
551
-
552
-// Intersection sets s to the intersection x ∩ y.
553
-func (s *Sparse) Intersection(x, y *Sparse) {
554
-	switch {
555
-	case s == x:
556
-		s.IntersectionWith(y)
557
-		return
558
-	case s == y:
559
-		s.IntersectionWith(x)
560
-		return
561
-	case x == y:
562
-		s.Copy(x)
563
-		return
564
-	}
565
-
566
-	xb := x.first()
567
-	yb := y.first()
568
-	sb := s.first()
569
-	for xb != &none && yb != &none {
570
-		switch {
571
-		case xb.offset < yb.offset:
572
-			xb = x.next(xb)
573
-			continue
574
-		case xb.offset > yb.offset:
575
-			yb = y.next(yb)
576
-			continue
577
-		}
578
-
579
-		if sb == &none {
580
-			sb = s.insertBlockBefore(sb)
581
-		}
582
-		sb.offset = xb.offset
583
-
584
-		var sum word
585
-		for i := range sb.bits {
586
-			r := xb.bits[i] & yb.bits[i]
587
-			sb.bits[i] = r
588
-			sum |= r
589
-		}
590
-		if sum != 0 {
591
-			sb = s.next(sb)
592
-		} else {
593
-			// sb will be overwritten or removed
594
-		}
595
-
596
-		xb = x.next(xb)
597
-		yb = y.next(yb)
598
-	}
599
-
600
-	s.discardTail(sb)
601
-}
602
-
603
-// Intersects reports whether s ∩ x ≠ ∅.
604
-func (s *Sparse) Intersects(x *Sparse) bool {
605
-	sb := s.first()
606
-	xb := x.first()
607
-	for sb != &none && xb != &none {
608
-		switch {
609
-		case xb.offset < sb.offset:
610
-			xb = x.next(xb)
611
-		case xb.offset > sb.offset:
612
-			sb = s.next(sb)
613
-		default:
614
-			for i := range sb.bits {
615
-				if sb.bits[i]&xb.bits[i] != 0 {
616
-					return true
617
-				}
618
-			}
619
-			sb = s.next(sb)
620
-			xb = x.next(xb)
621
-		}
622
-	}
623
-	return false
624
-}
625
-
626
-// UnionWith sets s to the union s ∪ x, and reports whether s grew.
627
-func (s *Sparse) UnionWith(x *Sparse) bool {
628
-	if s == x {
629
-		return false
630
-	}
631
-
632
-	var changed bool
633
-	xb := x.first()
634
-	sb := s.first()
635
-	for xb != &none {
636
-		if sb != &none && sb.offset == xb.offset {
637
-			for i := range xb.bits {
638
-				if sb.bits[i] != xb.bits[i] {
639
-					sb.bits[i] |= xb.bits[i]
640
-					changed = true
641
-				}
642
-			}
643
-			xb = x.next(xb)
644
-		} else if sb == &none || sb.offset > xb.offset {
645
-			sb = s.insertBlockBefore(sb)
646
-			sb.offset = xb.offset
647
-			sb.bits = xb.bits
648
-			changed = true
649
-
650
-			xb = x.next(xb)
651
-		}
652
-		sb = s.next(sb)
653
-	}
654
-	return changed
655
-}
656
-
657
-// Union sets s to the union x ∪ y.
658
-func (s *Sparse) Union(x, y *Sparse) {
659
-	switch {
660
-	case x == y:
661
-		s.Copy(x)
662
-		return
663
-	case s == x:
664
-		s.UnionWith(y)
665
-		return
666
-	case s == y:
667
-		s.UnionWith(x)
668
-		return
669
-	}
670
-
671
-	xb := x.first()
672
-	yb := y.first()
673
-	sb := s.first()
674
-	for xb != &none || yb != &none {
675
-		if sb == &none {
676
-			sb = s.insertBlockBefore(sb)
677
-		}
678
-		switch {
679
-		case yb == &none || (xb != &none && xb.offset < yb.offset):
680
-			sb.offset = xb.offset
681
-			sb.bits = xb.bits
682
-			xb = x.next(xb)
683
-
684
-		case xb == &none || (yb != &none && yb.offset < xb.offset):
685
-			sb.offset = yb.offset
686
-			sb.bits = yb.bits
687
-			yb = y.next(yb)
688
-
689
-		default:
690
-			sb.offset = xb.offset
691
-			for i := range xb.bits {
692
-				sb.bits[i] = xb.bits[i] | yb.bits[i]
693
-			}
694
-			xb = x.next(xb)
695
-			yb = y.next(yb)
696
-		}
697
-		sb = s.next(sb)
698
-	}
699
-
700
-	s.discardTail(sb)
701
-}
702
-
703
-// DifferenceWith sets s to the difference s ∖ x.
704
-func (s *Sparse) DifferenceWith(x *Sparse) {
705
-	if s == x {
706
-		s.Clear()
707
-		return
708
-	}
709
-
710
-	xb := x.first()
711
-	sb := s.first()
712
-	for xb != &none && sb != &none {
713
-		switch {
714
-		case xb.offset > sb.offset:
715
-			sb = s.next(sb)
716
-
717
-		case xb.offset < sb.offset:
718
-			xb = x.next(xb)
719
-
720
-		default:
721
-			var sum word
722
-			for i := range sb.bits {
723
-				r := sb.bits[i] & ^xb.bits[i]
724
-				sb.bits[i] = r
725
-				sum |= r
726
-			}
727
-			if sum == 0 {
728
-				sb = s.removeBlock(sb)
729
-			} else {
730
-				sb = s.next(sb)
731
-			}
732
-			xb = x.next(xb)
733
-		}
734
-	}
735
-}
736
-
737
-// Difference sets s to the difference x ∖ y.
738
-func (s *Sparse) Difference(x, y *Sparse) {
739
-	switch {
740
-	case x == y:
741
-		s.Clear()
742
-		return
743
-	case s == x:
744
-		s.DifferenceWith(y)
745
-		return
746
-	case s == y:
747
-		var y2 Sparse
748
-		y2.Copy(y)
749
-		s.Difference(x, &y2)
750
-		return
751
-	}
752
-
753
-	xb := x.first()
754
-	yb := y.first()
755
-	sb := s.first()
756
-	for xb != &none && yb != &none {
757
-		if xb.offset > yb.offset {
758
-			// y has block, x has &none
759
-			yb = y.next(yb)
760
-			continue
761
-		}
762
-
763
-		if sb == &none {
764
-			sb = s.insertBlockBefore(sb)
765
-		}
766
-		sb.offset = xb.offset
767
-
768
-		switch {
769
-		case xb.offset < yb.offset:
770
-			// x has block, y has &none
771
-			sb.bits = xb.bits
772
-
773
-			sb = s.next(sb)
774
-
775
-		default:
776
-			// x and y have corresponding blocks
777
-			var sum word
778
-			for i := range sb.bits {
779
-				r := xb.bits[i] & ^yb.bits[i]
780
-				sb.bits[i] = r
781
-				sum |= r
782
-			}
783
-			if sum != 0 {
784
-				sb = s.next(sb)
785
-			} else {
786
-				// sb will be overwritten or removed
787
-			}
788
-
789
-			yb = y.next(yb)
790
-		}
791
-		xb = x.next(xb)
792
-	}
793
-
794
-	for xb != &none {
795
-		if sb == &none {
796
-			sb = s.insertBlockBefore(sb)
797
-		}
798
-		sb.offset = xb.offset
799
-		sb.bits = xb.bits
800
-		sb = s.next(sb)
801
-
802
-		xb = x.next(xb)
803
-	}
804
-
805
-	s.discardTail(sb)
806
-}
807
-
808
-// SymmetricDifferenceWith sets s to the symmetric difference s ∆ x.
809
-func (s *Sparse) SymmetricDifferenceWith(x *Sparse) {
810
-	if s == x {
811
-		s.Clear()
812
-		return
813
-	}
814
-
815
-	sb := s.first()
816
-	xb := x.first()
817
-	for xb != &none && sb != &none {
818
-		switch {
819
-		case sb.offset < xb.offset:
820
-			sb = s.next(sb)
821
-		case xb.offset < sb.offset:
822
-			nb := s.insertBlockBefore(sb)
823
-			nb.offset = xb.offset
824
-			nb.bits = xb.bits
825
-			xb = x.next(xb)
826
-		default:
827
-			var sum word
828
-			for i := range sb.bits {
829
-				r := sb.bits[i] ^ xb.bits[i]
830
-				sb.bits[i] = r
831
-				sum |= r
832
-			}
833
-			if sum == 0 {
834
-				sb = s.removeBlock(sb)
835
-			} else {
836
-				sb = s.next(sb)
837
-			}
838
-			xb = x.next(xb)
839
-		}
840
-	}
841
-
842
-	for xb != &none { // append the tail of x to s
843
-		sb = s.insertBlockBefore(sb)
844
-		sb.offset = xb.offset
845
-		sb.bits = xb.bits
846
-		sb = s.next(sb)
847
-		xb = x.next(xb)
848
-	}
849
-}
850
-
851
-// SymmetricDifference sets s to the symmetric difference x ∆ y.
852
-func (s *Sparse) SymmetricDifference(x, y *Sparse) {
853
-	switch {
854
-	case x == y:
855
-		s.Clear()
856
-		return
857
-	case s == x:
858
-		s.SymmetricDifferenceWith(y)
859
-		return
860
-	case s == y:
861
-		s.SymmetricDifferenceWith(x)
862
-		return
863
-	}
864
-
865
-	sb := s.first()
866
-	xb := x.first()
867
-	yb := y.first()
868
-	for xb != &none && yb != &none {
869
-		if sb == &none {
870
-			sb = s.insertBlockBefore(sb)
871
-		}
872
-		switch {
873
-		case yb.offset < xb.offset:
874
-			sb.offset = yb.offset
875
-			sb.bits = yb.bits
876
-			sb = s.next(sb)
877
-			yb = y.next(yb)
878
-		case xb.offset < yb.offset:
879
-			sb.offset = xb.offset
880
-			sb.bits = xb.bits
881
-			sb = s.next(sb)
882
-			xb = x.next(xb)
883
-		default:
884
-			var sum word
885
-			for i := range sb.bits {
886
-				r := xb.bits[i] ^ yb.bits[i]
887
-				sb.bits[i] = r
888
-				sum |= r
889
-			}
890
-			if sum != 0 {
891
-				sb.offset = xb.offset
892
-				sb = s.next(sb)
893
-			}
894
-			xb = x.next(xb)
895
-			yb = y.next(yb)
896
-		}
897
-	}
898
-
899
-	for xb != &none { // append the tail of x to s
900
-		if sb == &none {
901
-			sb = s.insertBlockBefore(sb)
902
-		}
903
-		sb.offset = xb.offset
904
-		sb.bits = xb.bits
905
-		sb = s.next(sb)
906
-		xb = x.next(xb)
907
-	}
908
-
909
-	for yb != &none { // append the tail of y to s
910
-		if sb == &none {
911
-			sb = s.insertBlockBefore(sb)
912
-		}
913
-		sb.offset = yb.offset
914
-		sb.bits = yb.bits
915
-		sb = s.next(sb)
916
-		yb = y.next(yb)
917
-	}
918
-
919
-	s.discardTail(sb)
920
-}
921
-
922
-// SubsetOf reports whether s ∖ x = ∅.
923
-func (s *Sparse) SubsetOf(x *Sparse) bool {
924
-	if s == x {
925
-		return true
926
-	}
927
-
928
-	sb := s.first()
929
-	xb := x.first()
930
-	for sb != &none {
931
-		switch {
932
-		case xb == &none || xb.offset > sb.offset:
933
-			return false
934
-		case xb.offset < sb.offset:
935
-			xb = x.next(xb)
936
-		default:
937
-			for i := range sb.bits {
938
-				if sb.bits[i]&^xb.bits[i] != 0 {
939
-					return false
940
-				}
941
-			}
942
-			sb = s.next(sb)
943
-			xb = x.next(xb)
944
-		}
945
-	}
946
-	return true
947
-}
948
-
949
-// Equals reports whether the sets s and t have the same elements.
950
-func (s *Sparse) Equals(t *Sparse) bool {
951
-	if s == t {
952
-		return true
953
-	}
954
-	sb := s.first()
955
-	tb := t.first()
956
-	for {
957
-		switch {
958
-		case sb == &none && tb == &none:
959
-			return true
960
-		case sb == &none || tb == &none:
961
-			return false
962
-		case sb.offset != tb.offset:
963
-			return false
964
-		case sb.bits != tb.bits:
965
-			return false
966
-		}
967
-
968
-		sb = s.next(sb)
969
-		tb = t.next(tb)
970
-	}
971
-}
972
-
973
-// String returns a human-readable description of the set s.
974
-func (s *Sparse) String() string {
975
-	var buf bytes.Buffer
976
-	buf.WriteByte('{')
977
-	s.forEach(func(x int) {
978
-		if buf.Len() > 1 {
979
-			buf.WriteByte(' ')
980
-		}
981
-		fmt.Fprintf(&buf, "%d", x)
982
-	})
983
-	buf.WriteByte('}')
984
-	return buf.String()
985
-}
986
-
987
-// BitString returns the set as a string of 1s and 0s denoting the sum
988
-// of the i'th powers of 2, for each i in s.  A radix point, always
989
-// preceded by a digit, appears if the sum is non-integral.
990
-//
991
-// Examples:
992
-//              {}.BitString() =      "0"
993
-//           {4,5}.BitString() = "110000"
994
-//            {-3}.BitString() =      "0.001"
995
-//      {-3,0,4,5}.BitString() = "110001.001"
996
-//
997
-func (s *Sparse) BitString() string {
998
-	if s.IsEmpty() {
999
-		return "0"
1000
-	}
1001
-
1002
-	min, max := s.Min(), s.Max()
1003
-	var nbytes int
1004
-	if max > 0 {
1005
-		nbytes = max
1006
-	}
1007
-	nbytes++ // zero bit
1008
-	radix := nbytes
1009
-	if min < 0 {
1010
-		nbytes += len(".") - min
1011
-	}
1012
-
1013
-	b := make([]byte, nbytes)
1014
-	for i := range b {
1015
-		b[i] = '0'
1016
-	}
1017
-	if radix < nbytes {
1018
-		b[radix] = '.'
1019
-	}
1020
-	s.forEach(func(x int) {
1021
-		if x >= 0 {
1022
-			x += len(".")
1023
-		}
1024
-		b[radix-x] = '1'
1025
-	})
1026
-	return string(b)
1027
-}
1028
-
1029
-// GoString returns a string showing the internal representation of
1030
-// the set s.
1031
-//
1032
-func (s *Sparse) GoString() string {
1033
-	var buf bytes.Buffer
1034
-	for b := s.first(); b != &none; b = s.next(b) {
1035
-		fmt.Fprintf(&buf, "block %p {offset=%d next=%p prev=%p",
1036
-			b, b.offset, b.next, b.prev)
1037
-		for _, w := range b.bits {
1038
-			fmt.Fprintf(&buf, " 0%016x", w)
1039
-		}
1040
-		fmt.Fprintf(&buf, "}\n")
1041
-	}
1042
-	return buf.String()
1043
-}
1044
-
1045
-// AppendTo returns the result of appending the elements of s to slice
1046
-// in order.
1047
-func (s *Sparse) AppendTo(slice []int) []int {
1048
-	s.forEach(func(x int) {
1049
-		slice = append(slice, x)
1050
-	})
1051
-	return slice
1052
-}
1053
-
1054
-// -- Testing/debugging ------------------------------------------------
1055
-
1056
-// check returns an error if the representation invariants of s are violated.
1057
-func (s *Sparse) check() error {
1058
-	s.init()
1059
-	if s.root.empty() {
1060
-		// An empty set must have only the root block with offset MaxInt.
1061
-		if s.root.next != &s.root {
1062
-			return fmt.Errorf("multiple blocks with empty root block")
1063
-		}
1064
-		if s.root.offset != MaxInt {
1065
-			return fmt.Errorf("empty set has offset %d, should be MaxInt", s.root.offset)
1066
-		}
1067
-		return nil
1068
-	}
1069
-	for b := s.first(); ; b = s.next(b) {
1070
-		if b.offset%bitsPerBlock != 0 {
1071
-			return fmt.Errorf("bad offset modulo: %d", b.offset)
1072
-		}
1073
-		if b.empty() {
1074
-			return fmt.Errorf("empty block")
1075
-		}
1076
-		if b.prev.next != b {
1077
-			return fmt.Errorf("bad prev.next link")
1078
-		}
1079
-		if b.next.prev != b {
1080
-			return fmt.Errorf("bad next.prev link")
1081
-		}
1082
-		if b.next == &s.root {
1083
-			break
1084
-		}
1085
-		if b.offset >= b.next.offset {
1086
-			return fmt.Errorf("bad offset order: b.offset=%d, b.next.offset=%d",
1087
-				b.offset, b.next.offset)
1088
-		}
1089
-	}
1090
-	return nil
1091
-}
1092 1
deleted file mode 100644
... ...
@@ -1,84 +0,0 @@
1
-// Copyright 2013 The Go Authors. All rights reserved.
2
-// Use of this source code is governed by a BSD-style
3
-// license that can be found in the LICENSE file.
4
-
5
-package intsets
6
-
7
-// From Hacker's Delight, fig 5.2.
8
-func popcountHD(x uint32) int {
9
-	x -= (x >> 1) & 0x55555555
10
-	x = (x & 0x33333333) + ((x >> 2) & 0x33333333)
11
-	x = (x + (x >> 4)) & 0x0f0f0f0f
12
-	x = x + (x >> 8)
13
-	x = x + (x >> 16)
14
-	return int(x & 0x0000003f)
15
-}
16
-
17
-var a [1 << 8]byte
18
-
19
-func init() {
20
-	for i := range a {
21
-		var n byte
22
-		for x := i; x != 0; x >>= 1 {
23
-			if x&1 != 0 {
24
-				n++
25
-			}
26
-		}
27
-		a[i] = n
28
-	}
29
-}
30
-
31
-func popcountTable(x word) int {
32
-	return int(a[byte(x>>(0*8))] +
33
-		a[byte(x>>(1*8))] +
34
-		a[byte(x>>(2*8))] +
35
-		a[byte(x>>(3*8))] +
36
-		a[byte(x>>(4*8))] +
37
-		a[byte(x>>(5*8))] +
38
-		a[byte(x>>(6*8))] +
39
-		a[byte(x>>(7*8))])
40
-}
41
-
42
-// nlz returns the number of leading zeros of x.
43
-// From Hacker's Delight, fig 5.11.
44
-func nlz(x word) int {
45
-	x |= (x >> 1)
46
-	x |= (x >> 2)
47
-	x |= (x >> 4)
48
-	x |= (x >> 8)
49
-	x |= (x >> 16)
50
-	x |= (x >> 32)
51
-	return popcount(^x)
52
-}
53
-
54
-// ntz returns the number of trailing zeros of x.
55
-// From Hacker's Delight, fig 5.13.
56
-func ntz(x word) int {
57
-	if x == 0 {
58
-		return bitsPerWord
59
-	}
60
-	n := 1
61
-	if bitsPerWord == 64 {
62
-		if (x & 0xffffffff) == 0 {
63
-			n = n + 32
64
-			x = x >> 32
65
-		}
66
-	}
67
-	if (x & 0x0000ffff) == 0 {
68
-		n = n + 16
69
-		x = x >> 16
70
-	}
71
-	if (x & 0x000000ff) == 0 {
72
-		n = n + 8
73
-		x = x >> 8
74
-	}
75
-	if (x & 0x0000000f) == 0 {
76
-		n = n + 4
77
-		x = x >> 4
78
-	}
79
-	if (x & 0x00000003) == 0 {
80
-		n = n + 2
81
-		x = x >> 2
82
-	}
83
-	return n - int(x&1)
84
-}
85 1
deleted file mode 100644
... ...
@@ -1,8 +0,0 @@
1
-module golang.org/x/tools
2
-
3
-go 1.11
4
-
5
-require (
6
-	golang.org/x/net v0.0.0-20190311183353-d8887717615a
7
-	golang.org/x/sync v0.0.0-20190423024810-112230192c58
8
-)