1 # -*- coding: utf-8 -*-
3 #-------------------------------------------------------------------------
4 # drawElements Quality Program utilities
5 # --------------------------------------
7 # Copyright 2015 The Android Open Source Project
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
13 # http://www.apache.org/licenses/LICENSE-2.0
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.
21 #-------------------------------------------------------------------------
25 from itertools import chain
27 INL_HEADER_TMPL = """\
28 /* WARNING: This is auto-generated file. Do not modify, since changes will
29 * be lost! Modify the generating script instead.
31 * Generated from {registryName} revision {revision}.
35 def genInlHeader (registryName, revision):
36 return INL_HEADER_TMPL.format(
37 registryName = registryName,
38 revision = str(revision))
40 def genInlHeaderForSource (registrySource):
41 return genInlHeaderForSource(registrySource.getFilename(), registrySource.getRevision())
43 def nextMod (val, mod):
47 return int(val/mod)*mod + mod
49 def indentLines (lines):
53 lineColumns = [line.split("\t") for line in lines if line is not None]
54 if len(lineColumns) == 0:
57 numColumns = max(len(line) for line in lineColumns)
59 # Figure out max length per column
60 columnLengths = [nextMod(max(len(line[ndx]) for line in lineColumns if len(line) > ndx), tabSize) for ndx in range(numColumns)]
62 for line in lineColumns:
64 for columnNdx, col in enumerate(line[:-1]):
66 while colLen < columnLengths[columnNdx]:
68 colLen = nextMod(colLen, tabSize)
72 indented.append(line[-1])
73 yield "".join(indented)
75 def readFile (filename):
76 f = open(filename, 'rb')
81 def writeFileIfChanged (filename, data):
82 if not os.path.exists(filename) or readFile(filename) != data:
83 if (sys.version_info < (3, 0)):
84 f = open(filename, 'wt')
86 f = open(filename, 'wt', newline='\n')
90 def writeLines (filename, lines):
96 writeFileIfChanged(filename, text)
99 def writeInlFile (filename, header, source):
100 writeLines(filename, chain([header], source))
102 def normalizeConstant (constant):
103 value = int(constant, base=0)
106 elif value >= 1 << 32:
108 elif value >= 1 << 31:
112 return constant + suffix
114 def commandParams (command):
115 if len(command.params) > 0:
116 return ", ".join(param.declaration for param in command.params)
120 def commandArgs (command):
121 return ", ".join(param.name for param in command.params)