MCPcopy Create free account
hub / github.com/EASY233/Finger / binarySearch

Method binarySearch

lib/ip2Region.py:58–92  ·  view source on GitHub ↗

" binary search method " param: ip

(self, ip)

Source from the content-addressed store, hash-verified

56 return self.returnData(dataPtr)
57
58 def binarySearch(self, ip):
59 """
60 " binary search method
61 " param: ip
62 """
63 if not ip.isdigit(): ip = self.ip2long(ip)
64
65 if self.__indexCount == 0:
66 self.__f.seek(0)
67 superBlock = self.__f.read(8)
68 self.__indexSPtr = self.getLong(superBlock, 0)
69 self.__indexLPtr = self.getLong(superBlock, 4)
70 self.__indexCount = int((self.__indexLPtr - self.__indexSPtr) / self.__INDEX_BLOCK_LENGTH) + 1
71
72 l, h, dataPtr = (0, self.__indexCount, 0)
73 while l <= h:
74 m = int((l+h) >> 1)
75 p = m*self.__INDEX_BLOCK_LENGTH
76
77 self.__f.seek(self.__indexSPtr+p)
78 buffer = self.__f.read(self.__INDEX_BLOCK_LENGTH)
79 sip = self.getLong(buffer, 0)
80 if ip < sip:
81 h = m - 1
82 else:
83 eip = self.getLong(buffer, 4)
84 if ip > eip:
85 l = m + 1
86 else:
87 dataPtr = self.getLong(buffer, 8)
88 break
89
90 if dataPtr == 0: raise Exception("Data pointer not found")
91
92 return self.returnData(dataPtr)
93
94 def btreeSearch(self, ip):
95 """

Callers 1

getAttributableMethod · 0.80

Calls 3

ip2longMethod · 0.95
getLongMethod · 0.95
returnDataMethod · 0.95

Tested by

no test coverage detected