Class: BitSet
- Defined in:
- lib/setfu.rb,
lib/setfu.rb,
lib/setfu.rb,
lib/setfu.rb,
lib/setfu.rb,
lib/setfu.rb,
lib/setfu.rb,
lib/setfu.rb,
lib/setfu.rb,
lib/setfu.rb
Overview
now the stuff that slows down the editor … so last goes here
Constant Summary collapse
- UTF_UPPER_CASE_CHARS =
SETFU ‘ɶ’ uppercase or lowercase ??? I have this as lowercase, but I could be wrong …
leave in lowercase_dual until you get difinitive answer
"ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÑÒÓÔÕÖØÙÚÛÜÝÞðĀĂĄĆĈĊČĎĐĒĔĖĘĚĜĞĠĢĤĦĨĪĬĮIJĴĶĹĻĽĿŁŃŅŇŊŌŎŐŒŔŖŘŚŜŞŠŢŤŦŨŪŬŮŰŲŴŶŸŹŻŽƁƂƄƆƇƉƊƋƎƏƐƑƓƔƖƗƘƜƝƟƠƢƤƦƧƩƬƮƯƱƲƳƵƷƸƼǍǏǑǓǕǗǙǛǞǠǢǤǦǨǪǬǮǴǶǷǸǺǼǾȀȂȄȆȈȊȌȎȐȒȔȖȘȚȜȞȠȢȤȦȨȪȬȮȰȲȺȻȽȾɁɃɄɅɆɈɊɌɎΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩⱭⱯⱰⱾⱿfl"
- UTF_LOWER_CASE_CHARS =
"Ðàáâãäåçèéêëìíîïñòóôõöøùúûüýþÿāăąćĉċčďđēĕėęěĝğġģĥħĩīĭįĵķĺļľŀłńņňŋōŏőŕŗřśŝşšţťŧũūŭůűųŵŷźżžƀƃƅƈƌƒƕƙƚƞơƥƨƭưƴƶƹƽƿǎǐǒǔǖǘǚǜǝǟǡǥǧǩǫǭǯǵǹǻǿȁȃȅȇȉȋȍȏȑȓȕȗșțȝȟȥȧȩȫȭȯȱȳȼȿɀɂɇɉɋɍɏɐɑɒɓɔɖɗəɛɠɣɨɩɯɲɵʀʃʈʉʊʋʌʒαβγδεζηθικλμνξοπρςστυφχψωⱥⱦfi"
- UTF_LOWER_CASE_DUAL_CHARS =
"ȸȹijnjdždzʣʥæǣǽƣœœɶʦljʪʫijȣ"
- UTF_UPPER_CASE_DUAL_CHARS =
"NJDŽDZÆǢǼƢƢŒLJIJIJȢ"
- UTF_MIXED_CASE_DUAL_CHARS =
"LjNjDžDz"
- @@even_bits =
0x5555555555555555555555555555555555555555555555555555555555555555
- @@odd_bits =
0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- @@shifts =
256
Instance Attribute Summary collapse
-
#entropy ⇒ Object
Returns the value of attribute entropy.
Class Method Summary collapse
- .add_utf_case_pairs(str) ⇒ Object
- .default_utf_case_pairs ⇒ Object
- .default_utf_sets ⇒ Object
- .digit_chars ⇒ Object
- .dual_lowercase_utf_chars(return_set = true) ⇒ Object
- .dual_uppercase_utf_chars(return_set = true) ⇒ Object
- .fill(n_elms, start = 0) ⇒ Object
- .get_utf_case_pairs(char = true) ⇒ Object
- .letter_chars ⇒ Object
- .lowercase_chars ⇒ Object
- .lowercase_utf_chars(return_set = true) ⇒ Object
- .mixcase_utf_chars(return_set = true) ⇒ Object
- .modify_utf_sets(*prms) ⇒ Object
- .parse_chars ⇒ Object
- .rm_utf_case_pairs(obj) ⇒ Object
- .uppercase_chars ⇒ Object
- .uppercase_utf_chars(return_set = true) ⇒ Object
- .zap_utf_case_pairs ⇒ Object
- .zap_utf_sets ⇒ Object
Instance Method Summary collapse
- #!=(item) ⇒ Object
- #&(item) ⇒ Object
-
#**(item) ⇒ Object
intersection test.
- #-(item) ⇒ Object
- #<(item) ⇒ Object
- #<=(item) ⇒ Object
-
#==(item) ⇒ Object
comparison operators:.
- #===(item) ⇒ Object
-
#[](*pset) ⇒ Object
new behavior …
-
#[]=(*pset, value) ⇒ Object
pset goes in the box, value after ‘=’.
- #^(item) ⇒ Object
- #add(items) ⇒ Object
- #add!(items) ⇒ Object
- #add_digit_chars ⇒ Object
- #add_digit_chars! ⇒ Object
- #add_dual_lower_utf ⇒ Object
- #add_dual_lower_utf! ⇒ Object
- #add_dual_upper_utf ⇒ Object
- #add_dual_upper_utf! ⇒ Object
- #add_letter_chars ⇒ Object
- #add_letter_chars! ⇒ Object
- #add_lowercase_chars ⇒ Object
- #add_lowercase_chars! ⇒ Object
- #add_lowercase_utf ⇒ Object
- #add_lowercase_utf! ⇒ Object
- #add_mixcase_utf ⇒ Object
- #add_mixcase_utf! ⇒ Object
- #add_opposing_case ⇒ Object
- #add_opposing_case! ⇒ Object
- #add_opposing_utf_case ⇒ Object
- #add_opposing_utf_case! ⇒ Object
- #add_parse_chars ⇒ Object
- #add_parse_chars! ⇒ Object
- #add_primes(n = 100) ⇒ Object
- #add_primes!(n = 100) ⇒ Object
- #add_uppercase_chars ⇒ Object
- #add_uppercase_chars! ⇒ Object
- #add_uppercase_utf ⇒ Object
- #add_uppercase_utf! ⇒ Object
-
#coerce(other) ⇒ Object
this only works on integer …
- #count ⇒ Object
- #dec(n = 1) ⇒ Object
- #dec!(n = 1) ⇒ Object
- #dup ⇒ Object
- #each(*prms) ⇒ Object (also: #each_member)
- #empty? ⇒ Boolean
-
#entropy_2n! ⇒ Object
set entropy to the next greater power of 2**n.
- #eql?(item) ⇒ Boolean
- #even ⇒ Object
- #even! ⇒ Object
- #even? ⇒ Boolean
- #first(p = true) ⇒ Object (also: #min)
- #first!(p = true) ⇒ Object
- #inc(n = 1) ⇒ Object
- #inc!(n = 1) ⇒ Object
- #include?(items) ⇒ Boolean
-
#initialize(*data) ⇒ BitSet
constructor
A new instance of BitSet.
- #last(p = true) ⇒ Object (also: #max)
- #last!(p = true) ⇒ Object
-
#max_run ⇒ Object
max_run << returns maximum number of consecutive numbers.
- #mode ⇒ Object
- #odd ⇒ Object
- #odd! ⇒ Object
- #odd? ⇒ Boolean
-
#rand(elm_count, format = :bset) ⇒ Object
:array :array_chars :string :set.
- #rand!(elm_count, format = :bset) ⇒ Object
- #recalculate_entropy! ⇒ Object
- #replace(ent) ⇒ Object
-
#reverse_each(*prms) ⇒ Object
do a benchmark and see which is faster, reverse_each or each.
-
#runs ⇒ Object
01100010011111111100010101001101 …
- #runs?(cnt = 2) ⇒ Boolean
- #set_bits!(bits) ⇒ Object
- #set_case(mode = :mode_equal) ⇒ Object
-
#singles ⇒ Object
singles << creates a set of non-touching elements.
- #size ⇒ Object
- #split ⇒ Object
- #split! ⇒ Object
- #to_a(int = true) ⇒ Object
- #to_bset ⇒ Object
- #to_i ⇒ Object
- #to_ra(int = true, th = 3) ⇒ Object
- #to_s ⇒ Object
- #untag ⇒ Object
- #untag! ⇒ Object
- #zap! ⇒ Object
- #|(item) ⇒ Object
- #~@ ⇒ Object
Constructor Details
#initialize(*data) ⇒ BitSet
Returns a new instance of BitSet.
409 410 411 412 413 414 |
# File 'lib/setfu.rb', line 409 def initialize(*data) @bits = 0 @entropy = 0 add!(data) self end |
Instance Attribute Details
#entropy ⇒ Object
Returns the value of attribute entropy.
231 232 233 |
# File 'lib/setfu.rb', line 231 def entropy @entropy end |
Class Method Details
.add_utf_case_pairs(str) ⇒ Object
1307 1308 1309 1310 1311 1312 1313 |
# File 'lib/setfu.rb', line 1307 def self.add_utf_case_pairs(str) return if str.empty? raise "add_utf_case_pairs requires even number of characters" unless str.length.even? 0.step(str.length-2,2) do |x| @@TRANS_HASH[str[x].ord]=str[x+1].ord end end |
.default_utf_case_pairs ⇒ Object
1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 |
# File 'lib/setfu.rb', line 1245 def self.default_utf_case_pairs @@TRANS_HASH = { 192=>224, 193=>225, 194=>226, 195=>227, 196=>228, 197=>229, 198=>230, 199=>231, 200=>232, 201=>233, 202=>234, 203=>235, 204=>236, 205=>237, 206=>238, 207=>239, 208=>240, 209=>241, 210=>242, 211=>243, 212=>244, 213=>245, 214=>246, 216=>248, 217=>249, 218=>250, 219=>251, 220=>252, 221=>253, 222=>254, 224=>192, 225=>193, 226=>194, 227=>195, 228=>196, 229=>197, 230=>198, 231=>199, 232=>200, 233=>201, 234=>202, 235=>203, 236=>204, 237=>205, 238=>206, 239=>207, 240=>208, 241=>209, 242=>210, 243=>211, 244=>212, 245=>213, 246=>214, 248=>216, 249=>217, 250=>218, 251=>219, 252=>220, 253=>221, 254=>222, 255=>376, 256=>257, 257=>256, 258=>259, 259=>258, 260=>261, 261=>260, 262=>263, 263=>262, 264=>265, 265=>264, 266=>267, 267=>266, 268=>269, 269=>268, 270=>271, 271=>270, 272=>273, 273=>272, 274=>275, 275=>274, 276=>277, 277=>276, 278=>279, 279=>278, 280=>281, 281=>280, 282=>283, 283=>282, 284=>285, 285=>284, 286=>287, 287=>286, 288=>289, 289=>288, 290=>291, 291=>290, 292=>293, 293=>292, 294=>295, 295=>294, 296=>297, 297=>296, 298=>299, 299=>298, 300=>301, 301=>300, 302=>303, 303=>302, 306=>307, 307=>306, 308=>309, 309=>308, 310=>311, 311=>310, 313=>314, 314=>313, 315=>316, 316=>315, 317=>318, 318=>317, 319=>320, 320=>319, 321=>322, 322=>321, 323=>324, 324=>323, 325=>326, 326=>325, 327=>328, 328=>327, 330=>331, 331=>330, 332=>333, 333=>332, 334=>335, 335=>334, 336=>337, 337=>336, 338=>339, 339=>338, 340=>341, 341=>340, 342=>343, 343=>342, 344=>345, 345=>344, 346=>347, 347=>346, 348=>349, 349=>348, 350=>351, 351=>350, 352=>353, 353=>352, 354=>355, 355=>354, 356=>357, 357=>356, 358=>359, 359=>358, 360=>361, 361=>360, 362=>363, 363=>362, 364=>365, 365=>364, 366=>367, 367=>366, 368=>369, 369=>368, 370=>371, 371=>370, 372=>373, 373=>372, 374=>375, 375=>374, 376=>255, 377=>378, 378=>377, 379=>380, 380=>379, 381=>382, 382=>381, 384=>579, 385=>595, 386=>387, 387=>386, 388=>389, 389=>388, 390=>596, 391=>392, 392=>391, 393=>598, 394=>599, 395=>396, 396=>395, 398=>477, 399=>601, 400=>603, 401=>402, 402=>401, 403=>608, 404=>611, 405=>502, 406=>617, 407=>616, 408=>409, 409=>408, 410=>573, 412=>623, 413=>626, 414=>544, 415=>629, 416=>417, 417=>416, 418=>419, 419=>418, 420=>421, 421=>420, 422=>640, 423=>424, 424=>423, 425=>643, 428=>429, 429=>428, 430=>648, 431=>432, 432=>431, 433=>650, 434=>651, 435=>436, 436=>435, 437=>438, 438=>437, 439=>658, 440=>441, 441=>440, 444=>445, 445=>444, 447=>503, 452=>454, 454=>452, 455=>457, 457=>455, 458=>460, 460=>458, 461=>462, 462=>461, 463=>464, 464=>463, 465=>466, 466=>465, 467=>468, 468=>467, 469=>470, 470=>469, 471=>472, 472=>471, 473=>474, 474=>473, 475=>476, 476=>475, 477=>398, 478=>479, 479=>478, 480=>481, 481=>480, 482=>483, 483=>482, 484=>485, 485=>484, 486=>487, 487=>486, 488=>489, 489=>488, 490=>491, 491=>490, 492=>493, 493=>492, 494=>495, 495=>494, 497=>499, 499=>497, 500=>501, 501=>500, 502=>405, 503=>447, 504=>505, 505=>504, 506=>507, 507=>506, 508=>509, 509=>508, 510=>511, 511=>510, 512=>513, 513=>512, 514=>515, 515=>514, 516=>517, 517=>516, 518=>519, 519=>518, 520=>521, 521=>520, 522=>523, 523=>522, 524=>525, 525=>524, 526=>527, 527=>526, 528=>529, 529=>528, 530=>531, 531=>530, 532=>533, 533=>532, 534=>535, 535=>534, 536=>537, 537=>536, 538=>539, 539=>538, 540=>541, 541=>540, 542=>543, 543=>542, 544=>414, 546=>547, 547=>546, 548=>549, 549=>548, 550=>551, 551=>550, 552=>553, 553=>552, 554=>555, 555=>554, 556=>557, 557=>556, 558=>559, 559=>558, 560=>561, 561=>560, 562=>563, 563=>562, 570=>11365, 571=>572, 572=>571, 573=>410, 574=>11366, 575=>11390, 576=>11391, 577=>578, 578=>577, 579=>384, 580=>649, 581=>652, 582=>583, 583=>582, 584=>585, 585=>584, 586=>587, 587=>586, 588=>589, 589=>588, 590=>591, 591=>590, 592=>11375, 593=>11373, 594=>11376, 595=>385, 596=>390, 598=>393, 599=>394, 601=>399, 603=>400, 608=>403, 611=>404, 616=>407, 617=>406, 623=>412, 626=>413, 629=>415, 640=>422, 643=>425, 648=>430, 649=>580, 650=>433, 651=>434, 652=>581, 658=>439, 913=>945, 914=>946, 915=>947, 916=>948, 917=>949, 918=>950, 919=>951, 920=>952, 921=>953, 922=>954, 923=>955, 924=>956, 925=>957, 926=>958, 927=>959, 928=>960, 929=>961, 931=>963, 932=>964, 933=>965, 934=>966, 935=>967, 936=>968, 937=>969, 945=>913, 946=>914, 947=>915, 948=>916, 949=>917, 950=>918, 951=>919, 952=>920, 953=>921, 954=>922, 955=>923, 956=>924, 957=>925, 958=>926, 959=>927, 960=>928, 961=>929, 962=>931, 963=>931, 964=>932, 965=>933, 966=>934, 967=>935, 968=>936, 969=>937, 11365=>570, 11366=>574, 11373=>593, 11375=>592, 11376=>594, 11390=>575, 11391=>576, 64257=>64258, 64258=>64257 } end |
.default_utf_sets ⇒ Object
1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 |
# File 'lib/setfu.rb', line 1386 def self.default_utf_sets @@UTF_UPPER_CASE_CHARS = UTF_UPPER_CASE_CHARS @@UTF_LOWER_CASE_CHARS = UTF_LOWER_CASE_CHARS @@UTF_LOWER_CASE_DUAL_CHARS = UTF_LOWER_CASE_DUAL_CHARS @@UTF_UPPER_CASE_DUAL_CHARS = UTF_UPPER_CASE_DUAL_CHARS @@UTF_MIXED_CASE_DUAL_CHARS = UTF_MIXED_CASE_DUAL_CHARS @@UTF_UPPER_CASE_SET = UTF_UPPER_CASE_CHARS.to_bset @@UTF_LOWER_CASE_SET = UTF_LOWER_CASE_CHARS.to_bset @@UTF_LOWER_CASE_DUAL_SET = UTF_LOWER_CASE_DUAL_CHARS.to_bset @@UTF_UPPER_CASE_DUAL_SET = UTF_UPPER_CASE_DUAL_CHARS.to_bset @@UTF_MIXED_CASE_DUAL_SET = UTF_MIXED_CASE_DUAL_CHARS.to_bset end |
.digit_chars ⇒ Object
275 276 277 278 279 280 |
# File 'lib/setfu.rb', line 275 def self.digit_chars set = BitSet.new set.set_bits!(287948901175001088) set.entropy=58 return set end |
.dual_lowercase_utf_chars(return_set = true) ⇒ Object
1431 1432 1433 1434 |
# File 'lib/setfu.rb', line 1431 def self.dual_lowercase_utf_chars(return_set=true) return @@UTF_LOWER_CASE_DUAL_SET.dup if return_set return @@UTF_LOWER_CASE_DUAL_CHARS.dup end |
.dual_uppercase_utf_chars(return_set = true) ⇒ Object
1427 1428 1429 1430 |
# File 'lib/setfu.rb', line 1427 def self.dual_uppercase_utf_chars(return_set=true) return @@UTF_UPPER_CASE_DUAL_SET.dup if return_set return @@UTF_UPPER_CASE_DUAL_CHARS.dup end |
.fill(n_elms, start = 0) ⇒ Object
245 246 247 248 249 250 251 252 |
# File 'lib/setfu.rb', line 245 def self.fill(n_elms, start=0) set = BitSet.new bits = (1 << n_elms) - 1 set.set_bits!(bits) set.entropy=n_elms set.inc!(start.ord) return set end |
.get_utf_case_pairs(char = true) ⇒ Object
1315 1316 1317 1318 1319 1320 1321 1322 1323 |
# File 'lib/setfu.rb', line 1315 def self.get_utf_case_pairs(char=true) return @@TRANS_HASH.dup unless char rtn = {} @@TRANS_HASH.each_pair do |key,value| rtn[key.chr(Encoding::UTF_8)] = value.chr(Encoding::UTF_8) rtn[value.chr(Encoding::UTF_8)] = key.chr(Encoding::UTF_8) end return rtn end |
.letter_chars ⇒ Object
268 269 270 271 272 273 |
# File 'lib/setfu.rb', line 268 def self.letter_chars set = BitSet.new set.set_bits!(10633823810298881996379053697534001152) set.entropy=123 return set end |
.lowercase_chars ⇒ Object
261 262 263 264 265 266 |
# File 'lib/setfu.rb', line 261 def self.lowercase_chars set = BitSet.new set.set_bits!(10633823807823001954701781295154855936) set.entropy=123 return set end |
.lowercase_utf_chars(return_set = true) ⇒ Object
1419 1420 1421 1422 |
# File 'lib/setfu.rb', line 1419 def self.lowercase_utf_chars(return_set=true) return @@UTF_LOWER_CASE_SET.dup if return_set return @@UTF_LOWER_CASE_CHARS.dup end |
.mixcase_utf_chars(return_set = true) ⇒ Object
1423 1424 1425 1426 |
# File 'lib/setfu.rb', line 1423 def self.mixcase_utf_chars(return_set=true) return @@UTF_MIXED_CASE_DUAL_SET.dup if return_set return @@UTF_MIXED_CASE_DUAL_CHARS.dup end |
.modify_utf_sets(*prms) ⇒ Object
1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 |
# File 'lib/setfu.rb', line 1436 def self.modify_utf_sets(*prms) flag_add = true target_chars = nil target_set = nil source = nil prms.each do |prm| if prm.type_of? String source = prm elsif prm.type_of? BitSet source = prm elsif prm.type_of? Array source = prm elsif prm.type_of? Integer source = [prm] elsif prm.type_of? Symbol if prm == :rm flag_add = false elsif prm == :add flag_add = true elsif prm == :mix target_chars = "@@UTF_MIXED_CASE_DUAL_CHARS" target_set = "@@UTF_MIXED_CASE_DUAL_SET" elsif prm == :upper target_chars = "@@UTF_UPPER_CASE_CHARS" target_set = "@@UTF_UPPER_CASE_SET" elsif prm == :lower target_chars = "@@UTF_LOWER_CASE_CHARS" target_set = "@@UTF_LOWER_CASE_SET" elsif prm == :dual_upper target_chars = "@@UTF_UPPER_CASE_DUAL_CHARS" target_set = "@@UTF_UPPER_CASE_DUAL_SET" elsif prm == :dual_lower target_chars = "@@UTF_LOWER_CASE_DUAL_CHARS" target_set = "@@UTF_LOWER_CASE_DUAL_SET" end end end return false if target_chars.nil? return false if source.nil? if flag_add eval("#{target_set} |= source") eval("#{target_chars} = #{target_set}.to_s") else eval("#{target_set} -= source") eval("#{target_chars} = #{target_set}.to_s") end return true end |
.parse_chars ⇒ Object
282 283 284 285 286 287 |
# File 'lib/setfu.rb', line 282 def self.parse_chars set = BitSet.new set.set_bits!(159507359650170349735020301117175103487) set.entropy=127 return set end |
.rm_utf_case_pairs(obj) ⇒ Object
1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 |
# File 'lib/setfu.rb', line 1295 def self.rm_utf_case_pairs(obj) if obj.respond_to? :each_char obj.each_char do |ch| @@TRANS_HASH.delete str.ord end else obj.each do |elm| @@TRANS_HASH.delete elm end end end |
.uppercase_chars ⇒ Object
254 255 256 257 258 259 |
# File 'lib/setfu.rb', line 254 def self.uppercase_chars set = BitSet.new set.set_bits!(2475880041677272402379145216) set.entropy=91 return set end |
.uppercase_utf_chars(return_set = true) ⇒ Object
1415 1416 1417 1418 |
# File 'lib/setfu.rb', line 1415 def self.uppercase_utf_chars(return_set=true) return @@UTF_UPPER_CASE_SET.dup if return_set return @@UTF_UPPER_CASE_CHARS.dup end |
.zap_utf_case_pairs ⇒ Object
1291 1292 1293 |
# File 'lib/setfu.rb', line 1291 def self.zap_utf_case_pairs @@TRANS_HASH = {} end |
.zap_utf_sets ⇒ Object
1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 |
# File 'lib/setfu.rb', line 1401 def self.zap_utf_sets @@UTF_UPPER_CASE_CHARS = "" @@UTF_LOWER_CASE_CHARS = "" @@UTF_LOWER_CASE_DUAL_CHARS = "" @@UTF_UPPER_CASE_DUAL_CHARS = "" @@UTF_MIXED_CASE_DUAL_CHARS = "" @@UTF_UPPER_CASE_SET = "".to_bset @@UTF_LOWER_CASE_SET = "".to_bset @@UTF_LOWER_CASE_DUAL_SET = "".to_bset @@UTF_UPPER_CASE_DUAL_SET = "".to_bset @@UTF_MIXED_CASE_DUAL_SET = "".to_bset end |
Instance Method Details
#!=(item) ⇒ Object
553 554 555 556 557 558 559 560 |
# File 'lib/setfu.rb', line 553 def !=(item) if(item.type_of? BitSet) rtn = item.to_i != self.to_i else rtn = BitSet.new(item).to_i != self.to_i end rtn end |
#&(item) ⇒ Object
508 509 510 511 512 513 514 515 516 517 |
# File 'lib/setfu.rb', line 508 def &(item) rtn = self.dup if(item.type_of? BitSet) rtn.set_bits!(rtn.to_i & item.to_i) else rtn = BitSet.new(item) rtn.set_bits!(@bits & rtn.to_i) end rtn end |
#**(item) ⇒ Object
intersection test
537 538 539 540 541 |
# File 'lib/setfu.rb', line 537 def **(item) # intersection test set_item = BitSet.new(item) return false if (self & set_item).empty? return true end |
#-(item) ⇒ Object
519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 |
# File 'lib/setfu.rb', line 519 def -(item) rtn = BitSet.new rtn.entropy = self.entropy a = self.to_i if(item.type_of? BitSet) b = item.to_i rtn.entropy = item.entropy else b = BitSet.new(item) rtn.entropy = b.entropy b = b.to_i end c = a & b d = c ^ a rtn.set_bits!(d) rtn end |
#<(item) ⇒ Object
599 600 601 602 603 |
# File 'lib/setfu.rb', line 599 def <(item) si = BitSet.new item return false if (si == self) # not a 'proper' subset return si.include?(self) end |
#<=(item) ⇒ Object
594 595 596 597 |
# File 'lib/setfu.rb', line 594 def <=(item) si = BitSet.new item return si.include?(self) end |
#==(item) ⇒ Object
comparison operators:
544 545 546 547 548 549 550 551 |
# File 'lib/setfu.rb', line 544 def ==(item) if(item.type_of? BitSet) rtn = item.to_i == self.to_i else rtn = BitSet.new(item).to_i == self.to_i end rtn end |
#===(item) ⇒ Object
571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 |
# File 'lib/setfu.rb', line 571 def ===(item) # self ... when clause ... # item ... case clause ... case(item) # Note: coerce does not work in this context ... md = item.to_bset.mode || @mode case md when :mode_intersection return item ** self when :mode_sub return item <= self when :mode_proper return item < self when :mode_super return self <= item when :mode_superproper return self < item else return self == item end end |
#[](*pset) ⇒ Object
new behavior … single element returns true/false multi element … returns subset
809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 |
# File 'lib/setfu.rb', line 809 def [](*pset) idx = nil if pset.count==1 # check for single instance inst[5], inst['t'] if pset.first.type_of? Integer idx = pset.first elsif pset.first.type_of? String if pset.first.length == 1 idx = pset.first.ord end end end unless idx.nil? raise "Negative indexes are illegal for BitSet" if idx < 0 self.entropy = idx+1 y = @bits & (1<<idx) return true if y > 0 return false end return pset.to_bset & self end |
#[]=(*pset, value) ⇒ Object
pset goes in the box, value after ‘=’
830 831 832 833 834 835 836 837 838 839 |
# File 'lib/setfu.rb', line 830 def []=(*pset,value) # pset goes in the box, value after '=' pset = pset.to_bset state = value ? true : false if state replace pset | self # add elements to set else replace self - pset # remove elements from set end return state # this gets ignored, but to be safe, do what the previous version did end |
#^(item) ⇒ Object
485 486 487 488 489 490 491 492 493 494 |
# File 'lib/setfu.rb', line 485 def ^(item) rtn = self.dup if(item.type_of? BitSet) rtn.set_bits!(rtn.to_i ^ item.to_i) else rtn = BitSet.new(item) rtn.set_bits!(@bits ^ rtn.to_i) end rtn end |
#add(items) ⇒ Object
637 638 639 |
# File 'lib/setfu.rb', line 637 def add(items) dup.add!(items) end |
#add!(items) ⇒ Object
605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 |
# File 'lib/setfu.rb', line 605 def add!(items) if(items.type_of? BitSet) @bits |= items.to_i entropy = items.entropy elsif(items.type_of? Range) ran = items.reorder.simplify return add!(ran.to_a) unless ran.simple? f=ran.first.ord l=ran.last.ord # f,l = l,f if f>l t = (l-f)+1 t = (1 << t)-1 @bits |= t << f self.entropy = l+1 elsif(items.respond_to? :each_char) items.each_char do |item| @bits |= 1 << item.ord self.entropy = item.ord+1 end elsif(items.respond_to? :each) items.each do |item| add! item end else #assume number raise "negative numbers are not allowed" if items < 0 pos = 1 << items @bits |= pos self.entropy = items+1 end self end |
#add_digit_chars ⇒ Object
312 313 314 |
# File 'lib/setfu.rb', line 312 def add_digit_chars return BitSet.digit_chars | self end |
#add_digit_chars! ⇒ Object
307 308 309 310 |
# File 'lib/setfu.rb', line 307 def add_digit_chars! add! BitSet.digit_chars self end |
#add_dual_lower_utf ⇒ Object
1521 1522 1523 |
# File 'lib/setfu.rb', line 1521 def add_dual_lower_utf return BitSet.dual_lowercase_utf_chars | self end |
#add_dual_lower_utf! ⇒ Object
1525 1526 1527 1528 |
# File 'lib/setfu.rb', line 1525 def add_dual_lower_utf! add! BitSet.dual_lowercase_utf_chars self end |
#add_dual_upper_utf ⇒ Object
1512 1513 1514 |
# File 'lib/setfu.rb', line 1512 def add_dual_upper_utf return BitSet.dual_uppercase_utf_chars | self end |
#add_dual_upper_utf! ⇒ Object
1516 1517 1518 1519 |
# File 'lib/setfu.rb', line 1516 def add_dual_upper_utf! add! BitSet.dual_uppercase_utf_chars self end |
#add_letter_chars ⇒ Object
334 335 336 |
# File 'lib/setfu.rb', line 334 def add_letter_chars return BitSet.letter_chars | self end |
#add_letter_chars! ⇒ Object
338 339 340 341 |
# File 'lib/setfu.rb', line 338 def add_letter_chars! add! BitSet.letter_chars self end |
#add_lowercase_chars ⇒ Object
330 331 332 |
# File 'lib/setfu.rb', line 330 def add_lowercase_chars return BitSet.lowercase_chars | self end |
#add_lowercase_chars! ⇒ Object
325 326 327 328 |
# File 'lib/setfu.rb', line 325 def add_lowercase_chars! add! BitSet.lowercase_chars self end |
#add_lowercase_utf ⇒ Object
1485 1486 1487 |
# File 'lib/setfu.rb', line 1485 def add_lowercase_utf return BitSet.lowercase_utf_chars | self end |
#add_lowercase_utf! ⇒ Object
1489 1490 1491 1492 |
# File 'lib/setfu.rb', line 1489 def add_lowercase_utf! add! BitSet.lowercase_utf_chars self end |
#add_mixcase_utf ⇒ Object
1503 1504 1505 |
# File 'lib/setfu.rb', line 1503 def add_mixcase_utf return BitSet.mixcase_utf_chars | self end |
#add_mixcase_utf! ⇒ Object
1507 1508 1509 1510 |
# File 'lib/setfu.rb', line 1507 def add_mixcase_utf! add! BitSet.mixcase_utf_chars self end |
#add_opposing_case ⇒ Object
1336 1337 1338 |
# File 'lib/setfu.rb', line 1336 def add_opposing_case dup.add_opposing_case! end |
#add_opposing_case! ⇒ Object
1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 |
# File 'lib/setfu.rb', line 1325 def add_opposing_case! aa = BitSet.lowercase_chars bb = BitSet.uppercase_chars ka = aa & self # subset lower case kb = bb & self # subset upper case @bits |= ka.to_i >> 32 @bits |= kb.to_i << 32 self.entropy = 32 + kb.recalculate_entropy! if self.entropy <= 123 self end |
#add_opposing_utf_case ⇒ Object
1352 1353 1354 |
# File 'lib/setfu.rb', line 1352 def add_opposing_utf_case dup.add_opposing_utf_case! end |
#add_opposing_utf_case! ⇒ Object
1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 |
# File 'lib/setfu.rb', line 1340 def add_opposing_utf_case! add_opposing_case! tmp = @@TRANS_HASH.sort st = tmp.first[0] nd = tmp.last[0] self.each_member(st..nd) do |elm| unless @@TRANS_HASH[elm].nil? @bits |= 1 << @@TRANS_HASH[elm] @entropy = elm if elm > @entropy end end end |
#add_parse_chars ⇒ Object
303 304 305 |
# File 'lib/setfu.rb', line 303 def add_parse_chars return BitSet.parse_chars | self end |
#add_parse_chars! ⇒ Object
297 298 299 300 301 |
# File 'lib/setfu.rb', line 297 def add_parse_chars! # add! [0..47, 58..64, 91..96, 123..126] add! BitSet.parse_chars self end |
#add_primes(n = 100) ⇒ Object
1239 1240 1241 |
# File 'lib/setfu.rb', line 1239 def add_primes(n=100) self.add(Prime.take(n)) end |
#add_primes!(n = 100) ⇒ Object
1236 1237 1238 |
# File 'lib/setfu.rb', line 1236 def add_primes!(n=100) self.add!(Prime.take(n)) end |
#add_uppercase_chars ⇒ Object
321 322 323 |
# File 'lib/setfu.rb', line 321 def add_uppercase_chars return BitSet.uppercase_chars | self end |
#add_uppercase_chars! ⇒ Object
316 317 318 319 |
# File 'lib/setfu.rb', line 316 def add_uppercase_chars! add! BitSet.uppercase_chars self end |
#add_uppercase_utf ⇒ Object
1494 1495 1496 |
# File 'lib/setfu.rb', line 1494 def add_uppercase_utf return BitSet.uppercase_utf_chars | self end |
#add_uppercase_utf! ⇒ Object
1498 1499 1500 1501 |
# File 'lib/setfu.rb', line 1498 def add_uppercase_utf! add! BitSet.uppercase_utf_chars self end |
#coerce(other) ⇒ Object
this only works on integer … String, Array, Range does not implement: &, |, ^
474 475 476 477 |
# File 'lib/setfu.rb', line 474 def coerce(other) #puts "TESTING ... coerce called!" return [self, other] # does not seem to get called ... end |
#count ⇒ Object
734 735 736 737 738 739 740 |
# File 'lib/setfu.rb', line 734 def count cnt = 0 each_member do |toss| cnt += 1 end cnt end |
#dec(n = 1) ⇒ Object
443 444 445 |
# File 'lib/setfu.rb', line 443 def dec(n=1) return dup.dec!(n) end |
#dec!(n = 1) ⇒ Object
433 434 435 436 437 |
# File 'lib/setfu.rb', line 433 def dec!(n=1) raise "illegal negative parameter in #inc" if n < 0 @bits >>= n self end |
#dup ⇒ Object
479 480 481 482 483 |
# File 'lib/setfu.rb', line 479 def dup rtn = BitSet.new rtn.replace(self) return rtn end |
#each(*prms) ⇒ Object Also known as: each_member
697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 |
# File 'lib/setfu.rb', line 697 def each(*prms) return Enumerator.enumerate_yields(self, :each, *prms) unless block_given? bits = @bits pos = 0 stop = nil chr_mode = false prms.each do |prm| if prm.respond_to? :first a = prm.first.ord b = prm.last.ord a,b = b,a if a>b pos = a bits >>= pos stop = b else chr_mode = !prm end end while bits > 0 if ((bits & 1) == 1) yield chr_mode ? pos.chr(Encoding::UTF_8) : pos end pos += 1 unless stop.nil? break if pos > stop end bits >>= 1 end self end |
#empty? ⇒ Boolean
641 642 643 |
# File 'lib/setfu.rb', line 641 def empty? @bits == 0 end |
#entropy_2n! ⇒ Object
set entropy to the next greater power of 2**n
1126 1127 1128 |
# File 'lib/setfu.rb', line 1126 def entropy_2n! # set entropy to the next greater power of 2**n @entropy = 1 << @bits.bit_length.bit_length end |
#eql?(item) ⇒ Boolean
562 563 564 |
# File 'lib/setfu.rb', line 562 def eql?(item) self.==(item) end |
#even ⇒ Object
1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 |
# File 'lib/setfu.rb', line 1172 def even t = @@even_bits s = @@shifts while @bits > t t |= t << s s <<= 1 end rtn = self.dup rtn.set_bits!(t & @bits) return rtn end |
#even! ⇒ Object
1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 |
# File 'lib/setfu.rb', line 1197 def even! t1 = @@odd_bits t2 = @@even_bits s = @@shifts while @bits > t2 t1 |= t1 << s t2 |= t2 << s s <<= 1 end rtn = self.dup rtn.set_bits!(t1 & @bits) self.set_bits!(t2 & @bits) return rtn end |
#even? ⇒ Boolean
1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 |
# File 'lib/setfu.rb', line 1222 def even? return false if empty? t = @@even_bits s = @@shifts while @bits > t t |= t << s s <<= 1 end tst = t & @bits return tst == @bits end |
#first(p = true) ⇒ Object Also known as: min
1132 1133 1134 1135 |
# File 'lib/setfu.rb', line 1132 def first(p=true) rtn = @bits.lsb_bit_position return p ? rtn : rtn.chr(Encoding::UTF_8) end |
#first!(p = true) ⇒ Object
1140 1141 1142 1143 1144 |
# File 'lib/setfu.rb', line 1140 def first!(p=true) rtn = @bits.lsb_bit_position replace(self ^ [rtn]) unless rtn.nil? return p ? rtn : rtn.chr(Encoding::UTF_8) end |
#inc(n = 1) ⇒ Object
439 440 441 |
# File 'lib/setfu.rb', line 439 def inc(n=1) return dup.inc!(n) end |
#inc!(n = 1) ⇒ Object
426 427 428 429 430 431 |
# File 'lib/setfu.rb', line 426 def inc!(n=1) raise "illegal negative parameter in #inc" if n < 0 @entropy += n @bits <<= n self end |
#include?(items) ⇒ Boolean
645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 |
# File 'lib/setfu.rb', line 645 def include?(items) return false if items.nil? # sets never include nil return false if @bits == 0 # empty sets include nothing including other empty sets if(items.type_of? BitSet) tmp = @bits & items.to_i return false if tmp==0 return (tmp) == items.to_i elsif(items.type_of? Range) ran = items.reorder.simplify return(include?(ran.to_a)) unless ran.simple? f=ran.first.ord l=ran.last.ord # f,l = l,f if f>l t = (l-f)+1 t = (1 << t)-1 t = t << f return (@bits & t) == t elsif(items.respond_to? :each_char) return false if items.empty? items.each_char do |item| t = 1 << item.ord return false if 0 == (t & @bits) end elsif(items.respond_to? :each) return false if items.empty? items.each do |item| return false if false==include?(item) end else #assume number t = 1 << items.abs return false if 0 == (t & @bits) end return true end |
#last(p = true) ⇒ Object Also known as: max
1136 1137 1138 1139 |
# File 'lib/setfu.rb', line 1136 def last(p=true) rtn = @bits.msb_bit_position return p ? rtn : rtn.chr(Encoding::UTF_8) end |
#last!(p = true) ⇒ Object
1145 1146 1147 1148 1149 |
# File 'lib/setfu.rb', line 1145 def last!(p=true) rtn = @bits.msb_bit_position replace(self ^ [rtn]) unless rtn.nil? return p ? rtn : rtn.chr(Encoding::UTF_8) end |
#max_run ⇒ Object
max_run << returns maximum number of consecutive numbers
378 379 380 381 382 383 384 385 386 387 388 389 |
# File 'lib/setfu.rb', line 378 def max_run # max_run << returns maximum number of consecutive numbers return 0 if @bits==0 mx = 1 bits = @bits loop do bits <<= 1 bits &= @bits break if 0 == bits mx += 1 end return mx end |
#mode ⇒ Object
405 406 407 |
# File 'lib/setfu.rb', line 405 def mode return @mode end |
#odd ⇒ Object
1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 |
# File 'lib/setfu.rb', line 1161 def odd t = @@odd_bits s = @@shifts while @bits > t t |= t << s s <<= 1 end rtn = self.dup rtn.set_bits!(t & @bits) return rtn end |
#odd! ⇒ Object
1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 |
# File 'lib/setfu.rb', line 1183 def odd! t1 = @@odd_bits t2 = @@even_bits s = @@shifts while @bits > t2 t1 |= t1 << s t2 |= t2 << s s <<= 1 end rtn = self.dup rtn.set_bits!(t2 & @bits) self.set_bits!(t1 & @bits) return rtn end |
#odd? ⇒ Boolean
1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 |
# File 'lib/setfu.rb', line 1211 def odd? return false if empty? t = @@odd_bits s = @@shifts while @bits > t t |= t << s s <<= 1 end tst = t & @bits return tst == @bits end |
#rand(elm_count, format = :bset) ⇒ Object
:array :array_chars :string :set
842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 |
# File 'lib/setfu.rb', line 842 def rand(elm_count, format = :bset) ary = self.to_a ary.shuffle! ary = ary[0..(elm_count-1)] case format when :array return ary when :array_chars rtn = [] ary.each do |elm| rtn.push elm.chr(Encoding::UTF_8) end return rtn when :string rtn = [] ary.each do |elm| rtn.push elm.chr(Encoding::UTF_8) end return rtn.join "" else # :bset return ary.to_bset end end |
#rand!(elm_count, format = :bset) ⇒ Object
866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 |
# File 'lib/setfu.rb', line 866 def rand!(elm_count, format = :bset) ary = self.to_a rna = ary.shuffle[0..(elm_count-1)] replace rna.to_bset case format when :array return (ary - rna).shuffle when :array_chars src = (ary - rna).shuffle rtn = [] src.each do |elm| rtn.push elm.chr(Encoding::UTF_8) end return rtn when :string src = (ary - rna).shuffle rtn = [] src.each do |elm| rtn.push elm.chr(Encoding::UTF_8) end return rtn.join "" else # :bset return (ary - rna).to_bset end end |
#recalculate_entropy! ⇒ Object
447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 |
# File 'lib/setfu.rb', line 447 def recalculate_entropy! @entropy = 0 bits = @bits num = 1 << 8192 while(bits > num) @entropy += 8192 bits >>= 8192 end num = 1 << 256 while(bits > num) @entropy += 256 bits >>= 256 end num = 1 << 16 while(bits > num) @entropy += 16 bits >>= 16 end while(bits > 0) @entropy += 1 bits >>= 1 end #@entropy += 1 @entropy end |
#replace(ent) ⇒ Object
289 290 291 292 293 294 295 |
# File 'lib/setfu.rb', line 289 def replace(ent) ent = ent.to_bset @mode = ent.mode @entropy = ent.entropy @bits = ent.to_i self end |
#reverse_each(*prms) ⇒ Object
do a benchmark and see which is faster, reverse_each or each
680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 |
# File 'lib/setfu.rb', line 680 def reverse_each(*prms) # do a benchmark and see which is faster, reverse_each or each return Enumerator.enumerate_yields(self, :reverse_each, *prms) unless block_given? int_mode = true set = self.dup prms.each do |prm| if prm.respond_to? :first set &= prm else int_mode = prm end end ary = set.to_a(int_mode) while !ary.empty? yield ary.pop end end |
#runs ⇒ Object
01100010011111111100010101001101 … test
01100010011111111100010101001101 ... left shift
001000000011111111000000000001000 ... and with left shift
01100010011111111100010101001101 ... test
00110001001111111110001010100110 ... right shift
00100000001111111100000000000100 ... and with right shift
001000000011111111000000000001000 ... AND with left shift
00100000001111111100000000000100 ... AND with right shift
001100000011111111100000000001100 ... OR the two ands
01100010011111111100010101001101 ... test original
01100000011111111100000000001100 ... BINGO ... original with the OR gives us the runs only
00000010000000000000010101000001 ... BINGO ... original XOR with OR gives us the singles!
358 359 360 361 362 363 364 365 366 |
# File 'lib/setfu.rb', line 358 def runs # runs << creates a set of touching elements an_l = (@bits << 1) & @bits an_r = (@bits >> 1) & @bits or_lr = an_l | an_r rtn = BitSet.new rtn.set_bits!(or_lr & @bits) rtn.entropy=self.entropy return rtn end |
#runs?(cnt = 2) ⇒ Boolean
391 392 393 394 395 396 397 398 399 |
# File 'lib/setfu.rb', line 391 def runs?(cnt=2) bits = @bits (cnt-1).times do bits <<= 1 bits &= @bits return false if 0 == bits end return true end |
#set_bits!(bits) ⇒ Object
795 796 797 798 |
# File 'lib/setfu.rb', line 795 def set_bits!(bits) raise "negative numbers are not allowed" if bits.to_i < 0 @bits = bits.to_i end |
#set_case(mode = :mode_equal) ⇒ Object
566 567 568 569 |
# File 'lib/setfu.rb', line 566 def set_case(mode=:mode_equal) @mode = mode self end |
#singles ⇒ Object
singles << creates a set of non-touching elements
368 369 370 371 372 373 374 375 376 |
# File 'lib/setfu.rb', line 368 def singles # singles << creates a set of non-touching elements an_l = (@bits << 1) & @bits an_r = (@bits >> 1) & @bits or_lr = an_l | an_r rtn = BitSet.new rtn.set_bits!(or_lr ^ @bits) rtn.entropy=self.entropy return rtn end |
#size ⇒ Object
422 423 424 |
# File 'lib/setfu.rb', line 422 def size count end |
#split ⇒ Object
1358 1359 1360 1361 1362 1363 1364 1365 |
# File 'lib/setfu.rb', line 1358 def split ary = self.to_a len = ary.length lh = len >> 1 a = ary[0..(lh-1)].to_bset b = ary[lh..len].to_bset return [a,b] end |
#split! ⇒ Object
1366 1367 1368 1369 1370 1371 |
# File 'lib/setfu.rb', line 1366 def split! both = self.split rtn = both.last self.replace both.first return rtn end |
#to_a(int = true) ⇒ Object
750 751 752 753 754 755 756 |
# File 'lib/setfu.rb', line 750 def to_a(int = true) rtn = [] each_member do |num| rtn.push int ? num : num.chr(Encoding::UTF_8) end rtn end |
#to_bset ⇒ Object
401 402 403 |
# File 'lib/setfu.rb', line 401 def to_bset return self end |
#to_i ⇒ Object
730 731 732 |
# File 'lib/setfu.rb', line 730 def to_i return @bits end |
#to_ra(int = true, th = 3) ⇒ Object
758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 |
# File 'lib/setfu.rb', line 758 def to_ra(int=true, th=3) raise "Threshold too low" unless th >= 2 rtn = [] cnt = 0 last = -100 flag = false th -= 1 each_member do |num| # byebug unless int rtn.push int ? num : num.chr(Encoding::UTF_8) if ((last+1)==num) # byebug if cnt.nil? cnt += 1 flag = cnt >= th elsif flag save = rtn.pop tmp = rtn.pop(cnt+1) range = (tmp.first)..(tmp.last) rtn.push range rtn.push save cnt = 0 last = -100 flag = false else cnt = 0 end last = num end #byebug if flag # convert final range tmp = rtn.pop(cnt+1) range = (tmp.first)..(tmp.last) rtn.push range end rtn end |
#to_s ⇒ Object
742 743 744 745 746 747 748 |
# File 'lib/setfu.rb', line 742 def to_s rtn = "" each_member do |ch| rtn += ch.chr(Encoding::UTF_8) end rtn end |
#untag! ⇒ Object
186 187 188 189 |
# File 'lib/setfu.rb', line 186 def untag! remove_instance_variable :@bo_setfu_tag rescue :never_mind remove_instance_variable :@bo_setfu_count rescue :never_mind end |
#zap! ⇒ Object
416 417 418 419 420 |
# File 'lib/setfu.rb', line 416 def zap! @bits = 0 @entropy = 0 self end |
#|(item) ⇒ Object
496 497 498 499 500 501 502 503 504 505 506 |
# File 'lib/setfu.rb', line 496 def |(item) rtn = self.dup if(item.type_of? BitSet) rtn.set_bits!(rtn.to_i | item.to_i) self.entropy=item.entropy else rtn = BitSet.new(item) rtn.set_bits!(@bits | rtn.to_i) end rtn end |
#~@ ⇒ Object
800 801 802 803 804 805 |
# File 'lib/setfu.rb', line 800 def ~@() rtn = dup mask = (1 << @entropy) - 1 rtn.set_bits!(mask ^ @bits) rtn end |