# Source code for fontTools.ttLib.tables._l_o_c_a

    from . import DefaultTable
    import sys
    import array
    import logging

    log = logging.getLogger(__name__)

    class table__l_o_c_a(DefaultTable.DefaultTable):

    	dependencies = ['glyf']

    	def decompile(self, data, ttFont):
    		longFormat = ttFont['head'].indexToLocFormat
    		if longFormat:
    			format = "I"
    		else:
    			format = "H"
    		locations = array.array(format)
    		locations.frombytes(data)
    		if sys.byteorder != "big": locations.byteswap()
    		if not longFormat:
    			l = array.array("I")
    			for i in range(len(locations)):
    				l.append(locations[i] * 2)
    			locations = l
    		if len(locations) < (ttFont['maxp'].numGlyphs + 1):
    			log.warning("corrupt 'loca' table, or wrong numGlyphs in 'maxp': %d %d",
    				len(locations) - 1, ttFont['maxp'].numGlyphs)
    		self.locations = locations

    	def compile(self, ttFont):
    		try:
    			max_location = max(self.locations)
    		except AttributeError:
    			self.set([])
    			max_location = 0
    		if max_location < 0x20000 and all(l % 2 == 0 for l in self.locations):
    			locations = array.array("H")
    			for i in range(len(self.locations)):
    				locations.append(self.locations[i] // 2)
    			ttFont['head'].indexToLocFormat = 0
    		else:
    			locations = array.array("I", self.locations)
    			ttFont['head'].indexToLocFormat = 1
    		if sys.byteorder != "big": locations.byteswap()
    		return locations.tobytes()

    	def set(self, locations):
    		self.locations = array.array("I", locations)

    	def toXML(self, writer, ttFont):
    		writer.comment("The 'loca' table will be calculated by the compiler")
    		writer.newline()

    	def __getitem__(self, index):
    		return self.locations[index]

    	def __len__(self):
    		return len(self.locations)