1# -*- coding: utf-8 -*- 2 3#------------------------------------------------------------------------- 4# drawElements Quality Program utilities 5# -------------------------------------- 6# 7# Copyright 2015 The Android Open Source Project 8# 9# Licensed under the Apache License, Version 2.0 (the "License"); 10# you may not use this file except in compliance with the License. 11# You may obtain a copy of the License at 12# 13# http://www.apache.org/licenses/LICENSE-2.0 14# 15# Unless required by applicable law or agreed to in writing, software 16# distributed under the License is distributed on an "AS IS" BASIS, 17# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 18# See the License for the specific language governing permissions and 19# limitations under the License. 20# 21#------------------------------------------------------------------------- 22 23from itertools import chain 24 25INL_HEADER_TMPL = """\ 26/* WARNING: This is auto-generated file. Do not modify, since changes will 27 * be lost! Modify the generating script instead. 28 * 29 * Generated from {registryName} revision {revision}. 30 */\ 31""" 32 33def genInlHeader (registryName, revision): 34 return INL_HEADER_TMPL.format( 35 registryName = registryName, 36 revision = str(revision)) 37 38def genInlHeaderForSource (registrySource): 39 return genInlHeaderForSource(registrySource.getFilename(), registrySource.getRevision()) 40 41def nextMod (val, mod): 42 if val % mod == 0: 43 return val + mod 44 else: 45 return int(val/mod)*mod + mod 46 47def indentLines (lines): 48 tabSize = 4 49 50 # Split into columns 51 lineColumns = [line.split("\t") for line in lines if line is not None] 52 if len(lineColumns) == 0: 53 return 54 55 numColumns = max(len(line) for line in lineColumns) 56 57 # Figure out max length per column 58 columnLengths = [nextMod(max(len(line[ndx]) for line in lineColumns if len(line) > ndx), tabSize) for ndx in range(numColumns)] 59 60 for line in lineColumns: 61 indented = [] 62 for columnNdx, col in enumerate(line[:-1]): 63 colLen = len(col) 64 while colLen < columnLengths[columnNdx]: 65 col += "\t" 66 colLen = nextMod(colLen, tabSize) 67 indented.append(col) 68 69 # Append last col 70 indented.append(line[-1]) 71 yield "".join(indented) 72 73def readFile (filename): 74 f = open(filename, 'rb') 75 data = f.read() 76 f.close() 77 return data 78 79def writeFileIfChanged (filename, data): 80 oldData = readFile(filename) 81 if data != oldData: 82 f = open(filename, 'wb') 83 f.write(data) 84 f.close() 85 86def writeLines (filename, lines): 87 text = "" 88 for line in lines: 89 text += line 90 text += "\n" 91 92 writeFileIfChanged(filename, text) 93 print filename 94 95def writeInlFile (filename, header, source): 96 writeLines(filename, chain([header], source)) 97 98def normalizeConstant (constant): 99 value = int(constant, base=0) 100 if value >= 1 << 63: 101 suffix = 'ull' 102 elif value >= 1 << 32: 103 suffix = 'll' 104 elif value >= 1 << 31: 105 suffix = 'u' 106 else: 107 suffix = '' 108 return constant + suffix 109 110def commandParams (command): 111 if len(command.params) > 0: 112 return ", ".join(param.declaration for param in command.params) 113 else: 114 return "void" 115 116def commandArgs (command): 117 return ", ".join(param.name for param in command.params) 118