YkLib 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (125) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +11 -0
  3. data/.rspec +3 -0
  4. data/.travis.yml +6 -0
  5. data/CODE_OF_CONDUCT.md +74 -0
  6. data/Gemfile +7 -0
  7. data/Gemfile.lock +34 -0
  8. data/LICENSE.txt +21 -0
  9. data/README.md +44 -0
  10. data/Rakefile +6 -0
  11. data/YkLib.gemspec +29 -0
  12. data/bin/console +14 -0
  13. data/bin/setup +8 -0
  14. data/lib/YkLib/Yk/__advance__.rb +151 -0
  15. data/lib/YkLib/Yk/__defun__.rb +44 -0
  16. data/lib/YkLib/Yk/__hook__.rb +244 -0
  17. data/lib/YkLib/Yk/__minmax__.rb +123 -0
  18. data/lib/YkLib/Yk/__stdlog.rb +329 -0
  19. data/lib/YkLib/Yk/adhocLiterals/email.rb +119 -0
  20. data/lib/YkLib/Yk/adhocLiterals/path.rb +402 -0
  21. data/lib/YkLib/Yk/adhocLiterals/tag.rb +19 -0
  22. data/lib/YkLib/Yk/adhocLiterals/url.rb +36 -0
  23. data/lib/YkLib/Yk/adhocLiterals.rb +199 -0
  24. data/lib/YkLib/Yk/auto_escseq.rb +5 -0
  25. data/lib/YkLib/Yk/auto_pstore.rb +179 -0
  26. data/lib/YkLib/Yk/bsearch.rb +120 -0
  27. data/lib/YkLib/Yk/clambda.rb +309 -0
  28. data/lib/YkLib/Yk/confLine.rb +423 -0
  29. data/lib/YkLib/Yk/create_tty_width_available.rb +24 -0
  30. data/lib/YkLib/Yk/crypt.rb +26 -0
  31. data/lib/YkLib/Yk/debug2 +1 -0
  32. data/lib/YkLib/Yk/debug2.rb +473 -0
  33. data/lib/YkLib/Yk/debugout.rb +139 -0
  34. data/lib/YkLib/Yk/email_tz.rb +533 -0
  35. data/lib/YkLib/Yk/enum_expect.rb +170 -0
  36. data/lib/YkLib/Yk/errlog.rb +5 -0
  37. data/lib/YkLib/Yk/escseq.rb +59 -0
  38. data/lib/YkLib/Yk/eval_alt.rb +281 -0
  39. data/lib/YkLib/Yk/expector.rb +93 -0
  40. data/lib/YkLib/Yk/fetch.rb +556 -0
  41. data/lib/YkLib/Yk/fetch_old.rb +290 -0
  42. data/lib/YkLib/Yk/fib.rb +158 -0
  43. data/lib/YkLib/Yk/file_aux.rb +843 -0
  44. data/lib/YkLib/Yk/file_aux2.rb +919 -0
  45. data/lib/YkLib/Yk/file_aux_old.rb +160 -0
  46. data/lib/YkLib/Yk/filemod.rb +19 -0
  47. data/lib/YkLib/Yk/force_escseq.rb +3 -0
  48. data/lib/YkLib/Yk/generator__.rb +144 -0
  49. data/lib/YkLib/Yk/generator__.rb.org +139 -0
  50. data/lib/YkLib/Yk/indenter/argless_case.rb +46 -0
  51. data/lib/YkLib/Yk/indenter/each_token.rb +671 -0
  52. data/lib/YkLib/Yk/indenter/free_case.rb +313 -0
  53. data/lib/YkLib/Yk/indenter/if_less.rb +53 -0
  54. data/lib/YkLib/Yk/indenter/independent_ensure.rb +23 -0
  55. data/lib/YkLib/Yk/indenter/independent_rescue.rb +23 -0
  56. data/lib/YkLib/Yk/indenter/operand_circumflex.rb +0 -0
  57. data/lib/YkLib/Yk/indenter/operand_period.rb +16 -0
  58. data/lib/YkLib/Yk/indenter/parenless_and.rb +37 -0
  59. data/lib/YkLib/Yk/indenter/post_test.rb +48 -0
  60. data/lib/YkLib/Yk/indenter/token.rb +1525 -0
  61. data/lib/YkLib/Yk/indenter.rb +1382 -0
  62. data/lib/YkLib/Yk/inot.rb +265 -0
  63. data/lib/YkLib/Yk/intf.rb +815 -0
  64. data/lib/YkLib/Yk/io_aux.rb +1332 -0
  65. data/lib/YkLib/Yk/ioctl.rb +60 -0
  66. data/lib/YkLib/Yk/ipcc.rb +87 -0
  67. data/lib/YkLib/Yk/ipcountry.rb +207 -0
  68. data/lib/YkLib/Yk/ipv4adr.rb +318 -0
  69. data/lib/YkLib/Yk/localmail.rb +276 -0
  70. data/lib/YkLib/Yk/method_chain.rb +359 -0
  71. data/lib/YkLib/Yk/misc_tz.rb +1716 -0
  72. data/lib/YkLib/Yk/missing_method.rb +50 -0
  73. data/lib/YkLib/Yk/mojiConv.rb +257 -0
  74. data/lib/YkLib/Yk/nostdlog.rb +4 -0
  75. data/lib/YkLib/Yk/on_marshal.rb +20 -0
  76. data/lib/YkLib/Yk/overrider.rb +47 -0
  77. data/lib/YkLib/Yk/path.rb +293 -0
  78. data/lib/YkLib/Yk/path_aux.rb +883 -0
  79. data/lib/YkLib/Yk/path_aux_alt.rb +0 -0
  80. data/lib/YkLib/Yk/path_rep.rb +1267 -0
  81. data/lib/YkLib/Yk/pg_setup.rb +917 -0
  82. data/lib/YkLib/Yk/procinfo.rb +314 -0
  83. data/lib/YkLib/Yk/proclist.rb +492 -0
  84. data/lib/YkLib/Yk/property.rb +863 -0
  85. data/lib/YkLib/Yk/ranger.rb +606 -0
  86. data/lib/YkLib/Yk/resolv_tz.rb +88 -0
  87. data/lib/YkLib/Yk/rlprompt.rb +73 -0
  88. data/lib/YkLib/Yk/rootexec.rb +48 -0
  89. data/lib/YkLib/Yk/rpm-packageproxy.rb +784 -0
  90. data/lib/YkLib/Yk/rpm-packageproxy2.rb +1430 -0
  91. data/lib/YkLib/Yk/rwhen.rb +21 -0
  92. data/lib/YkLib/Yk/selector.rb +124 -0
  93. data/lib/YkLib/Yk/set.rb +170 -0
  94. data/lib/YkLib/Yk/shellquote.rb +300 -0
  95. data/lib/YkLib/Yk/sio.rb +1001 -0
  96. data/lib/YkLib/Yk/sio0.rb +835 -0
  97. data/lib/YkLib/Yk/sio_aux.rb +1524 -0
  98. data/lib/YkLib/Yk/sio_inot.rb +86 -0
  99. data/lib/YkLib/Yk/sock_aux.rb +42 -0
  100. data/lib/YkLib/Yk/spipe.rb +843 -0
  101. data/lib/YkLib/Yk/sql_table.rb +565 -0
  102. data/lib/YkLib/Yk/stdlog.rb +4 -0
  103. data/lib/YkLib/Yk/syscommand.rb +173 -0
  104. data/lib/YkLib/Yk/sysinit.rb +75 -0
  105. data/lib/YkLib/Yk/ttyFontWidth.rb +46113 -0
  106. data/lib/YkLib/Yk/tty_char.dump +0 -0
  107. data/lib/YkLib/Yk/tty_char.rb +47 -0
  108. data/lib/YkLib/Yk/tty_char_create.rb +437031 -0
  109. data/lib/YkLib/Yk/tty_char_static.rb +437016 -0
  110. data/lib/YkLib/Yk/tty_rewrite.rb +142 -0
  111. data/lib/YkLib/Yk/tty_str.rb +461 -0
  112. data/lib/YkLib/Yk/tty_width.dat.rb +114 -0
  113. data/lib/YkLib/Yk/tty_width.rb +180 -0
  114. data/lib/YkLib/Yk/tty_width_available +569 -0
  115. data/lib/YkLib/Yk/tty_width_list +0 -0
  116. data/lib/YkLib/Yk/tty_width_list.linux +280 -0
  117. data/lib/YkLib/Yk/tty_width_list.windows +324 -0
  118. data/lib/YkLib/Yk/tz_tty +0 -0
  119. data/lib/YkLib/Yk/tz_tty.rb +0 -0
  120. data/lib/YkLib/Yk/uprepos.rb +94 -0
  121. data/lib/YkLib/Yk/userinfo.rb +91 -0
  122. data/lib/YkLib/Yk/with.rb +109 -0
  123. data/lib/YkLib/version.rb +3 -0
  124. data/lib/YkLib.rb +6 -0
  125. metadata +170 -0
@@ -0,0 +1,606 @@
1
+
2
+ require "Yk/generator__"
3
+ require "Yk/misc_tz"
4
+
5
+
6
+ class Ranger
7
+ class NInf
8
+ end
9
+ class Inf
10
+ end
11
+ def Inf.num
12
+ self
13
+ end
14
+ def Inf.to_s
15
+ return "Inf"
16
+ end
17
+ def NInf.to_s
18
+ return "Ninf"
19
+ end
20
+ def Inf.<=> (arg)
21
+ return 1
22
+ end
23
+ def Inf.< (arg)
24
+ false
25
+ end
26
+ def Inf.<= (arg)
27
+ arg == Inf
28
+ end
29
+ def Inf.> (arg)
30
+ arg != Inf
31
+ end
32
+ def Inf.>= (arg)
33
+ true
34
+ end
35
+ def Inf.+ (arg)
36
+ if arg != NInf
37
+ Inf
38
+ else
39
+ raise ArgumentError.new("undefined: Inf + NInf\n")
40
+ end
41
+ end
42
+ def Inf.- (arg)
43
+ if arg != Inf
44
+ Inf
45
+ else
46
+ raise ArgumentError.new("undefined: Inf - Inf\n")
47
+ end
48
+ end
49
+ def Inf.-@ (arg)
50
+ NInf
51
+ end
52
+ def NInf.num
53
+ self
54
+ end
55
+ def NInf.<=> (arg)
56
+ return -1
57
+ end
58
+ def NInf.< (arg)
59
+ arg != NInf
60
+ end
61
+ def NInf.<= (arg)
62
+ true
63
+ end
64
+ def NInf.> (arg)
65
+ false
66
+ end
67
+ def NInf.>= (arg)
68
+ arg == NInf
69
+ end
70
+ def NInf.+ (arg)
71
+ if arg == Inf
72
+ raise ArgumentError.new("undefined: NInf + Inf\n")
73
+ else
74
+ NInf
75
+ end
76
+ end
77
+ def NInf.- (arg)
78
+ if arg != NInf
79
+ NInf
80
+ else
81
+ raise ArgumentError.new("undefined: NInf - NInf\n")
82
+ end
83
+ end
84
+ def NInf.-@ (arg)
85
+ Inf
86
+ end
87
+ def NInf.coerce (other)
88
+ [other, other - 1]
89
+ end
90
+ def Inf.coerce (other)
91
+ [other, other + 1]
92
+ end
93
+ class RgElem
94
+ attr :num, true
95
+ attr :mode, true
96
+ def initialize (fig, mode = true)
97
+ if fig.is_a? RgElem
98
+ @num = fig.num
99
+ @mode = fig.mode
100
+ return
101
+ end
102
+ @num = fig
103
+ @mode = mode
104
+ end
105
+ def clone
106
+ RgElem.new(self)
107
+ end
108
+ def inverse
109
+ RgElem.new(@num, !@mode)
110
+ end
111
+ def <=> (arg)
112
+ @num <=> arg.num
113
+ end
114
+ def < (arg)
115
+ @num < arg.num
116
+ end
117
+ def > (arg)
118
+ @num > arg.num
119
+ end
120
+ def <= (arg)
121
+ @num <= arg.num
122
+ end
123
+ def >= (arg)
124
+ @num >= arg.num
125
+ end
126
+ def == (arg)
127
+ @num == arg.num
128
+ end
129
+ def RgElem.from (arg)
130
+ return RgElem.new(arg, true), RgElem.new(Inf, false)
131
+ end
132
+ def RgElem.to (arg)
133
+ return RgElem.new(NInf, true), RgElem.new(arg + 1, false)
134
+ end
135
+ def RgElem.get (arg)
136
+ case arg
137
+ when :all
138
+ return RgElem.new(NInf, true), RgElem.new(Inf, false)
139
+ when Integer
140
+ return RgElem.new(arg, true), RgElem.new(arg + 1, false)
141
+ when Range
142
+ #if !arg.first.is_a? Integer
143
+ # raise ArgumentError.new("illeagal Range object, #{arg.first.inspect}\n")
144
+ #end
145
+ #if !arg.last.is_a? Integer
146
+ # raise ArgumentError.new("illeagal Range object\n")
147
+ #end
148
+ if arg.exclude_end?
149
+ if arg.first < arg.last
150
+ @start, @last = RgElem.new(arg.first, true), RgElem.new(arg.last, false)
151
+ else
152
+ #er arg
153
+ raise ArgumentError.new("illeagal Range object\n")
154
+ end
155
+ else
156
+ if arg.first <= arg.last
157
+ @start, @last = RgElem.new(arg.first, true), RgElem.new(arg.last + 1, false)
158
+ else
159
+ raise ArgumentError.new("illeagal Range object\n")
160
+ end
161
+ end
162
+ end
163
+ end
164
+ end
165
+ attr :ranges
166
+ def initialize (*args)
167
+ @ranges = []
168
+ def @ranges.inspect
169
+ res = "["
170
+ each_index do |i|
171
+ e = self[i]
172
+ fin = i == size - 1
173
+ res += "#{e ? e.num : e.inspect}#{!fin ? (e.mode ? '=' : '-') : ""}"
174
+ end
175
+ res += "]"
176
+ end
177
+ add(*args)
178
+ # if !arg.is_a? self.class
179
+ # if arg
180
+ # if arg.is_a? String
181
+ # arg = arg.to_i
182
+ # end
183
+ # @ranges.push(*RgElem.get(arg))
184
+ # end
185
+ # else
186
+ # arg.ranges.each do |r|
187
+ # @ranges.push r.clone
188
+ # end
189
+ # end
190
+ end
191
+ def check
192
+ #er @ranges
193
+ if @ranges.size % 2 != 0
194
+ STDERR.write "size error!\n"
195
+ exit 1
196
+ end
197
+ @ranges.each2by1 do |a, b|
198
+ if a.mode == b.mode
199
+ STDERR.write "mode error! #{a.mode}, #{b.mode}\n"
200
+ exit 1
201
+ end
202
+ if a.num >= b.num
203
+ STDERR.write "number error! #{a.num} >= #{b.num}\n"
204
+ exit 1
205
+ end
206
+ end
207
+ end
208
+ def add (*args)
209
+ args.each do |arg|
210
+ case arg
211
+ when Ranger
212
+ arg.eachRange do |r|
213
+ __add(r)
214
+ end
215
+ else
216
+ __add(arg)
217
+ end
218
+ end
219
+ end
220
+ def __add (arg)
221
+ start, last = RgElem.get(arg)
222
+ _add(start, last)
223
+ end
224
+ def _add (start, last)
225
+ #er start, last do
226
+ # "add #{start.num}=#{last.num}"
227
+ #end
228
+ if @ranges.size == 0
229
+ @ranges.clear
230
+ @ranges.push start, last
231
+ return
232
+ end
233
+ if start < @ranges[0]
234
+ if last < @ranges[0]
235
+ @ranges.unshift start, last
236
+ return
237
+ elsif last == @ranges[0]
238
+ @ranges[0].num = start.num
239
+ return
240
+ else
241
+ if @ranges[-1] <= last
242
+ @ranges.clear
243
+ @ranges.push start, last
244
+ return
245
+ end
246
+ @ranges[0].num = start.num
247
+ end
248
+ else
249
+ if @ranges[-1] <= last
250
+ if @ranges[-1] < start
251
+ @ranges.push start, last
252
+ return
253
+ elsif @ranges[-1] == start
254
+ @ranges[-1].num = last.num
255
+ return
256
+ else
257
+ if start == @ranges[0]
258
+ @ranges.clear
259
+ @ranges.push start, last
260
+ return
261
+ end
262
+ @ranges[-1].num = last.num
263
+ if @ranges[-2].num == NInf
264
+ return
265
+ else
266
+ last.num = @ranges[-2].num + 1
267
+ if last.num == @ranges[-1].num
268
+ last.num = last.num - 1
269
+ end
270
+ if start.num >= last.num
271
+ return
272
+ end
273
+ end
274
+ end
275
+ end
276
+ end
277
+ startPos = nil
278
+ lastPos = nil
279
+ (0 .. @ranges.size - 2).each do |i|
280
+ if @ranges[i] <= start && start < @ranges[i + 1]
281
+ startPos = i
282
+ end
283
+ if @ranges[i] <= last && last < @ranges[i + 1]
284
+ lastPos = i
285
+ end
286
+ end
287
+ merge start, startPos, last, lastPos
288
+ end
289
+ def merge (start, startPos, last, lastPos)
290
+ #er start, startPos, last, lastPos do
291
+ # "#{start.num}@#{startPos}=#{last.num}@#{lastPos}"
292
+ #end
293
+ case [@ranges[startPos].mode, @ranges[lastPos].mode, startPos == lastPos]
294
+ when [true, true, true]
295
+ return
296
+ when [false, false, true]
297
+ if start != @ranges[startPos]
298
+ @ranges.insert startPos + 1, start, last
299
+ else
300
+ @ranges[startPos].num = last.num
301
+ end
302
+ when [true, true, false]
303
+ @ranges.slice!(startPos + 1 .. lastPos)
304
+ when [true, false, false]
305
+ @ranges[lastPos].num = last.num
306
+ @ranges.slice!(startPos + 1 ... lastPos)
307
+ when [false, true, false]
308
+ if start != @ranges[startPos]
309
+ if startPos + 1 != lastPos
310
+ @ranges.slice!(startPos + 2 .. lastPos)
311
+ end
312
+ @ranges[startPos + 1].num = start.num
313
+ else
314
+ @ranges.slice!(startPos .. lastPos)
315
+ end
316
+ when [false, false, false]
317
+ if start != @ranges[startPos]
318
+ @ranges[startPos + 1].num = start.num
319
+ @ranges[lastPos].num = last.num
320
+ @ranges.slice!(startPos + 2 .. lastPos - 1)
321
+ else
322
+ @ranges[lastPos].num = last.num
323
+ @ranges.slice!(startPos .. lastPos - 1)
324
+ end
325
+ end
326
+ end
327
+ def addFrom (arg)
328
+ start, last = RgElem.from(arg)
329
+ _add(start, last)
330
+ end
331
+ def addTo (arg)
332
+ start, last = RgElem.to(arg)
333
+ _add(start, last)
334
+ end
335
+ def delFrom (arg)
336
+ start, last = RgElem.from(arg)
337
+ _del(start, last)
338
+ end
339
+ def delTo (arg)
340
+ start, last = RgElem.to(arg)
341
+ _del(start, last)
342
+ end
343
+ def del (arg)
344
+ start, last = RgElem.get(arg)
345
+ _del(start, last)
346
+ end
347
+ def _del (start, last)
348
+ #er start, last do
349
+ # "del #{start.num}-#{last.num}"
350
+ #end
351
+ if @ranges.size == 0
352
+ return
353
+ end
354
+ if start < @ranges[0]
355
+ if last < @ranges[0]
356
+ return
357
+ else
358
+ if @ranges[-1] <= last
359
+ @ranges.clear
360
+ return
361
+ end
362
+ start = RgElem.new(@ranges[0])
363
+ end
364
+ else
365
+ if @ranges[-1] <= last
366
+ if @ranges[-1] <= start
367
+ return
368
+ else
369
+ if start <= @ranges[0]
370
+ @ranges.clear
371
+ return
372
+ end
373
+ if @ranges[-2] < start
374
+ @ranges[-1].num = start.num
375
+ return
376
+ elsif @ranges[-2] == start
377
+ @ranges.pop
378
+ @ranges.pop
379
+ return
380
+ end
381
+ @ranges.pop
382
+ @ranges.pop
383
+ startPos = nil
384
+ (0 .. @ranges.size - 2).each do |i|
385
+ if @ranges[i] <= start && start.num <= @ranges[i + 1].num - 1
386
+ startPos = i
387
+ end
388
+ end
389
+ if startPos
390
+ last = @ranges[-1]
391
+ lastPos = @ranges.size - 1
392
+ exclude start, startPos, last, lastPos
393
+ return
394
+ else
395
+ return
396
+ end
397
+ end
398
+ end
399
+ end
400
+ startPos = nil
401
+ lastPos = nil
402
+ (0 .. @ranges.size - 2).each do |i|
403
+ if @ranges[i] <= start && start.num <= @ranges[i + 1].num - 1
404
+ startPos = i
405
+ end
406
+ if @ranges[i] <= last && last.num <= @ranges[i + 1].num - 1
407
+ lastPos = i
408
+ end
409
+ end
410
+ exclude start, startPos, last, lastPos
411
+ end
412
+ def exclude (start, startPos, last, lastPos)
413
+ #er start, startPos, last, lastPos do
414
+ # "#{start.num}@#{startPos}-#{last.num}@#{lastPos}"
415
+ #end
416
+ case [@ranges[startPos].mode, @ranges[lastPos].mode, startPos == lastPos]
417
+ when [true, true, true]
418
+ if start == @ranges[startPos]
419
+ @ranges[startPos].num = last.num
420
+ else
421
+ @ranges.insert startPos + 1, start.inverse, last.inverse
422
+ end
423
+ when [false, false, true]
424
+ when [true, true, false]
425
+ @ranges[lastPos].num = last.num
426
+ if @ranges[startPos] == start
427
+ @ranges.slice!(startPos .. lastPos - 1)
428
+ else
429
+ @ranges[startPos + 1].num = start.num
430
+ @ranges.slice!(startPos + 2 .. lastPos - 1)
431
+ end
432
+ when [true, false, false]
433
+ if @ranges[startPos] == start
434
+ @ranges.slice!(startPos .. lastPos)
435
+ else
436
+ @ranges[startPos + 1].num = start.num
437
+ @ranges.slice!(startPos + 2 .. lastPos)
438
+ end
439
+ when [false, true, false]
440
+ @ranges[lastPos].num = last.num
441
+ @ranges.slice! startPos + 1 .. lastPos - 1
442
+ when [false, false, false]
443
+ @ranges.slice! startPos + 1 .. lastPos
444
+ end
445
+ end
446
+ def reverse!
447
+ if @ranges.size == 0
448
+ @ranges.push RgElem.new(NInf, true), RgElem.new(Inf, false)
449
+ return
450
+ end
451
+ @ranges.each do |e|
452
+ e.mode = !e.mode
453
+ end
454
+ if @ranges[0].num == NInf
455
+ @ranges.slice!(0)
456
+ else
457
+ @ranges.unshift RgElem.new(NInf, true)
458
+ end
459
+ if @ranges[-1].num == Inf
460
+ @ranges.slice!(-1)
461
+ else
462
+ @ranges.push RgElem.new(Inf, false)
463
+ end
464
+ self
465
+ end
466
+ def reverse
467
+ clone.reverse!
468
+ end
469
+ def except! (arg)
470
+ arg.ranges.each2 do |a, b|
471
+ _del(a, b)
472
+ end
473
+ self
474
+ end
475
+ def except (arg)
476
+ clone.except! arg
477
+ end
478
+ def union! (arg)
479
+ arg.ranges.each2 do |a, b|
480
+ _add(a, b)
481
+ end
482
+ self
483
+ end
484
+ def union (arg)
485
+ clone.union!(arg)
486
+ end
487
+ def intersect! (arg)
488
+ except! arg.clone.reverse!
489
+ self
490
+ end
491
+ def intersect (arg)
492
+ c = clone
493
+ c.intersect!(arg)
494
+ end
495
+ def clone
496
+ self.class.new(self)
497
+ end
498
+ def each
499
+ @ranges.each2 do |a, b|
500
+ if a.num == b.num - 1
501
+ yield a.num
502
+ else
503
+ yield a.num .. b.num - 1
504
+ end
505
+ end
506
+ end
507
+ def eachRange
508
+ @ranges.each2 do |a, b|
509
+ yield a.num .. b.num - 1
510
+ end
511
+ end
512
+ def rangeArr
513
+ ret = []
514
+ eachRange do |r|
515
+ ret.push r
516
+ end
517
+ ret
518
+ end
519
+ def == (arg)
520
+ if arg.is_a? Ranger
521
+ rangeArr == arg.rangeArr
522
+ elsif arg.is_a? Integer
523
+ ra = rangeArr
524
+ if ra.size == 1
525
+ ra[0].first == arg && ra[0].first == ra[0].last
526
+ else
527
+ false
528
+ end
529
+ end
530
+ end
531
+ def include? (*args)
532
+ c = clone
533
+ args.each do |a|
534
+ if a.is_a? Range
535
+ a = Ranger.new(a)
536
+ end
537
+ c.union! a
538
+ end
539
+ self == c
540
+ end
541
+ def take (*args)
542
+ ar = Ranger.new
543
+ args.each do |e|
544
+ case e
545
+ when Ranger
546
+ ar.union! e
547
+ when Integer, Range
548
+ ar.add e
549
+ end
550
+ end
551
+ ar.delTo 0
552
+ ret = self.class.new
553
+ ret.clear
554
+ if @ranges[0].num == NInf
555
+ return ret
556
+ end
557
+ offset = 0
558
+ ar.each__ :eachRange do |g|
559
+ s, l = (+g).first, (+g).last
560
+ s -= offset
561
+ l -= offset
562
+ bg = nil
563
+ eachRange do |r|
564
+ a, b = r.first, r.last
565
+ bg == "a" && bg = a
566
+ clause do
567
+ if !bg
568
+ if b - a >= s
569
+ bg = a + s
570
+ redo
571
+ end
572
+ else
573
+ if b - a >= l
574
+ ret.add bg .. a + l
575
+ g.inc
576
+ s, l = (+g).first, (+g).last
577
+ s -= offset
578
+ l -= offset
579
+ bg = nil
580
+ redo
581
+ else
582
+ ret.add bg .. b
583
+ bg = "a"
584
+ end
585
+ end
586
+ offset += b - a + 1
587
+ s -= b - a + 1
588
+ l -= b - a + 1
589
+ end
590
+ end
591
+ end
592
+ ret
593
+ end
594
+ def size
595
+ sz = 0
596
+ eachRange do |r|
597
+ sz += r.last - r.first + 1
598
+ end
599
+ sz
600
+ end
601
+ def clear
602
+ @ranges.clear
603
+ end
604
+ end
605
+
606
+
@@ -0,0 +1,88 @@
1
+
2
+
3
+ require 'resolv'
4
+ require 'Yk/__hook__'
5
+ require 'thread'
6
+ require 'Yk/set'
7
+ require 'etc'
8
+ require 'fileutils'
9
+
10
+
11
+ class Resolv
12
+ RESOLVA = "#{Etc.getpwuid(Process.euid).dir}/.resolva"
13
+ if !File.exist? RESOLVA
14
+ Dir.mkdir RESOLVA
15
+ end
16
+ RESOLVA_D = "#{RESOLVA}/names"
17
+ if !File.exist? RESOLVA_D
18
+ Dir.mkdir RESOLVA_D
19
+ end
20
+ RESOLVA_N = "#{RESOLVA}/no_name"
21
+ class << Object.new
22
+ Resolv.__hook__ :getaddresses do |org|
23
+ mutex = Mutex.new
24
+ prc = Proc.new do |a, f|
25
+ lastMTime = File.mtime(f) rescue Time.at(0)
26
+ set = Set.new
27
+ if File.directory?(f)
28
+ Dir.foreach f do |ent|
29
+ next if ent == ".." || ent == "."
30
+ if File.mtime("#{f}/#{ent}") > Time.now - 3600 * 24
31
+ set.insert ent
32
+ else
33
+ File.delete "#{f}/#{ent}"
34
+ end
35
+ end
36
+ end
37
+ if lastMTime < Time.now - 180
38
+ trials = 0
39
+ mtrials = 0
40
+ ttrials = 0
41
+ newIPSet = Set.new
42
+ while mutex.synchronize{trials <= set.size * 3 && mtrials < 30 && ttrials < 100}
43
+ t = Thread.new do
44
+ Thread.pass
45
+ res = []
46
+ begin
47
+ ttrials += 1
48
+ res = org.getaddresses a
49
+ ttrials = 0
50
+ rescue Exception
51
+ end
52
+ mutex.synchronize do
53
+ newIPSet.insert *res
54
+ set.insert *res
55
+ trials += res.size
56
+ mtrials += 1
57
+ end
58
+ end
59
+ sleep 0.1
60
+ end
61
+ mutex.synchronize do
62
+ if !File.directory? f
63
+ Dir.mkdir f
64
+ end
65
+ newIPSet.each do |ip|
66
+ FileUtils.touch "#{f}/#{ip}"
67
+ end
68
+ end
69
+ FileUtils.touch f
70
+ end
71
+ set.to_a
72
+ end
73
+ nr = prc.call "asdf.aa#{rand.to_s[2..-1]}aa.com", RESOLVA_N
74
+ if org.args.size > 0
75
+ r = prc.call org.args[0], "#{RESOLVA_D}/#{org.args[0]}"
76
+ r -= nr
77
+ else
78
+ nr
79
+ end
80
+ end
81
+ Resolv.__hook__ :getaddress do |org|
82
+ rs = org.call
83
+ Resolv.getaddresses.include?(rs) ? nil : rs
84
+ end
85
+ end
86
+ end
87
+
88
+