Module to handle spacemaps

Hex Artifact Content
anonymous

Hex Artifact Content

Artifact 133ef4212afdf8972bf5f5e14639e18eac5739688bf32ebd653516d6e1044d75:


0000: 23 23 0a 23 20 70 79 2d 73 70 61 63 65 6d 61 70  ##.# py-spacemap
0010: 20 72 6f 6f 74 20 70 61 63 6b 61 67 65 0a 23 20   root package.# 
0020: 68 74 74 70 3a 2f 2f 63 6f 64 65 2e 67 6f 6f 67  http://code.goog
0030: 6c 65 2e 63 6f 6d 2f 70 2f 70 79 2d 73 70 61 63  le.com/p/py-spac
0040: 65 6d 61 70 0a 23 23 0a 0a 22 22 22 0a 54 68 69  emap.##..""".Thi
0050: 73 20 6d 6f 64 75 6c 65 20 70 72 6f 76 69 64 65  s module provide
0060: 73 20 73 69 6d 70 6c 65 20 63 6c 61 73 73 20 74  s simple class t
0070: 6f 20 77 6f 72 6b 20 77 69 74 68 20 73 70 61 63  o work with spac
0080: 65 6d 61 70 73 2c 20 6f 62 6a 65 63 74 73 20 74  emaps, objects t
0090: 68 61 74 20 6d 61 72 6b 73 0a 73 6f 6d 65 20 70  hat marks.some p
00a0: 6f 72 74 69 6f 6e 73 20 6f 66 20 67 69 76 65 6e  ortions of given
00b0: 20 72 61 6e 67 65 2e 0a 0a 49 6d 61 67 69 6e 65   range...Imagine
00c0: 20 74 68 61 74 20 77 65 20 68 61 76 65 20 72 61   that we have ra
00d0: 6e 67 65 20 6f 66 20 31 30 20 62 79 74 65 73 2e  nge of 10 bytes.
00e0: 20 53 6f 20 77 65 20 77 61 6e 74 20 74 6f 20 6d   So we want to m
00f0: 61 72 6b 20 62 79 74 65 73 20 32 20 2d 20 33 20  ark bytes 2 - 3 
0100: 61 73 20 75 73 65 64 0a 61 6e 64 20 61 6c 73 6f  as used.and also
0110: 20 38 20 2d 20 39 2e 20 49 20 6b 6e 6f 77 20 74   8 - 9. I know t
0120: 68 69 73 20 6a 75 73 74 20 61 20 72 6f 75 67 68  his just a rough
0130: 20 65 78 61 6d 70 6c 65 2e 0a 0a 41 6e 79 20 72   example...Any r
0140: 61 6e 67 65 20 63 61 6e 20 62 65 20 67 69 76 65  ange can be give
0150: 6e 20 61 73 20 70 61 69 72 20 78 3a 79 20 77 68  n as pair x:y wh
0160: 65 72 65 20 78 20 69 73 20 70 61 72 74 20 6f 66  ere x is part of
0170: 20 74 68 65 20 6d 61 72 6b 65 64 20 72 61 6e 67   the marked rang
0180: 65 20 61 6e 64 20 79 20 2d 0a 6e 65 78 74 20 66  e and y -.next f
0190: 72 65 65 20 73 70 61 63 65 2e 20 49 6e 20 6d 61  ree space. In ma
01a0: 74 68 65 6d 61 74 69 63 61 6c 20 6e 6f 74 61 74  thematical notat
01b0: 69 6f 6e 20 74 68 69 73 20 69 73 20 65 71 75 61  ion this is equa
01c0: 6c 20 74 6f 20 5b 78 3a 79 29 2e 0a 0a 4d 6f 64  l to [x:y)...Mod
01d0: 75 6c 65 20 61 6c 73 6f 20 63 61 6e 3a 0a 0a 20  ule also can:.. 
01e0: 2d 20 61 75 74 6f 73 68 72 69 6e 6b 20 6d 61 70  - autoshrink map
01f0: 73 2c 20 69 2e 65 2e 20 5b 32 3a 33 29 2c 5b 33  s, i.e. [2:3),[3
0200: 3a 36 29 20 3d 20 5b 32 3a 36 29 3b 0a 0a 20 2d  :6) = [2:6);.. -
0210: 20 73 75 62 73 74 72 61 63 74 20 6d 61 70 73 2c   substract maps,
0220: 20 74 68 65 20 70 72 6f 64 75 63 74 20 6f 66 20   the product of 
0230: 41 20 2d 20 42 20 69 73 20 61 6c 6c 20 73 70 61  A - B is all spa
0240: 63 65 20 69 6e 20 41 20 74 68 61 74 20 69 73 20  ce in A that is 
0250: 6e 6f 74 20 63 6f 76 65 72 65 64 0a 62 79 20 42  not covered.by B
0260: 2c 20 69 2e 65 2e 20 5b 32 3a 31 30 29 20 2d 20  , i.e. [2:10) - 
0270: 5b 35 3a 37 29 20 3d 20 5b 32 3a 35 29 2c 5b 37  [5:7) = [2:5),[7
0280: 2c 31 30 29 3b 0a 0a 20 2d 20 67 65 74 20 69 6e  ,10);.. - get in
0290: 74 65 72 73 65 63 74 69 6f 6e 20 28 6c 6f 67 69  tersection (logi
02a0: 63 61 6c 20 6f 72 29 2c 20 74 68 65 20 70 72 6f  cal or), the pro
02b0: 64 75 63 74 20 6f 66 20 41 20 61 6e 64 20 42 20  duct of A and B 
02c0: 69 73 20 61 6c 6c 20 73 70 61 63 65 20 74 68 61  is all space tha
02d0: 74 20 63 61 6e 0a 62 65 20 66 6f 75 6e 64 20 62  t can.be found b
02e0: 6f 74 68 20 69 6e 20 41 20 61 6e 64 20 69 6e 20  oth in A and in 
02f0: 42 2c 20 69 2e 65 2e 20 5b 32 3a 31 30 29 20 61  B, i.e. [2:10) a
0300: 6e 64 20 5b 35 3a 31 35 29 20 3d 20 5b 35 3a 31  nd [5:15) = [5:1
0310: 30 29 3b 0a 0a 20 2d 20 63 6f 6d 70 61 72 65 20  0);.. - compare 
0320: 6d 61 70 73 2e 0a 0a 6d 6f 72 65 20 77 69 6c 6c  maps...more will
0330: 20 62 65 20 61 64 64 65 64 20 73 6f 6f 6e 2e 2e   be added soon..
0340: 2e 0a 22 22 22 0a 0a 5f 5f 61 6c 6c 5f 5f 20 3d  .."""..__all__ =
0350: 20 5b 0a 09 27 5f 5f 61 75 74 68 6f 72 5f 5f 27   [..'__author__'
0360: 2c 0a 09 27 5f 5f 64 61 74 65 5f 5f 27 2c 0a 09  ,..'__date__',..
0370: 27 5f 5f 76 65 72 73 69 6f 6e 5f 5f 27 2c 0a 09  '__version__',..
0380: 27 5f 5f 64 6f 63 66 6f 72 6d 61 74 5f 5f 27 2c  '__docformat__',
0390: 0a 09 27 76 65 72 73 69 6f 6e 27 2c 0a 09 27 76  ..'version',..'v
03a0: 65 72 73 69 6f 6e 5f 69 6e 66 6f 27 2c 0a 09 27  ersion_info',..'
03b0: 53 70 61 63 65 4d 61 70 27 2c 0a 09 27 74 65 73  SpaceMap',..'tes
03c0: 74 27 2c 0a 5d 0a 0a 23 20 4f 70 74 69 6f 6e 61  t',.]..# Optiona
03d0: 6c 2e 0a 74 72 79 3a 0a 09 66 72 6f 6d 20 2e 70  l..try:..from .p
03e0: 72 6f 6a 65 63 74 20 69 6d 70 6f 72 74 20 76 65  roject import ve
03f0: 72 73 69 6f 6e 5f 69 6e 66 6f 2c 20 76 65 72 73  rsion_info, vers
0400: 69 6f 6e 2c 20 61 75 74 68 6f 72 20 61 73 20 5f  ion, author as _
0410: 5f 61 75 74 68 6f 72 5f 5f 2c 20 64 61 74 65 20  _author__, date 
0420: 61 73 20 5f 5f 64 61 74 65 5f 5f 0a 09 5f 5f 76  as __date__..__v
0430: 65 72 73 69 6f 6e 5f 5f 20 3d 20 76 65 72 73 69  ersion__ = versi
0440: 6f 6e 0a 09 66 72 6f 6d 20 2e 74 65 73 74 20 69  on..from .test i
0450: 6d 70 6f 72 74 20 74 65 73 74 0a 65 78 63 65 70  mport test.excep
0460: 74 20 49 6d 70 6f 72 74 45 72 72 6f 72 3a 0a 09  t ImportError:..
0470: 70 61 73 73 0a 0a 66 72 6f 6d 20 2e 73 70 61 63  pass..from .spac
0480: 65 6d 61 70 20 69 6d 70 6f 72 74 20 53 70 61 63  emap import Spac
0490: 65 4d 61 70 0a                                   eMap.