blob: 6d0e4f7654e7aef76290a13de7a8f44530ff5345 [file] [log] [blame]
Pyry Haulosa0178632014-11-21 14:56:21 -08001# -*- coding: utf-8 -*-
2
Jarkko Pöyry3c77ed42015-01-06 12:54:34 -08003#-------------------------------------------------------------------------
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
Pyry Haulosca801e72016-11-17 15:26:29 -080023import os
Pyry Haulosa0178632014-11-21 14:56:21 -080024from itertools import chain
25
26INL_HEADER_TMPL = """\
27/* WARNING: This is auto-generated file. Do not modify, since changes will
28 * be lost! Modify the generating script instead.
29 *
30 * Generated from {registryName} revision {revision}.
31 */\
32"""
33
34def genInlHeader (registryName, revision):
35 return INL_HEADER_TMPL.format(
36 registryName = registryName,
37 revision = str(revision))
38
39def genInlHeaderForSource (registrySource):
40 return genInlHeaderForSource(registrySource.getFilename(), registrySource.getRevision())
41
42def nextMod (val, mod):
43 if val % mod == 0:
44 return val + mod
45 else:
46 return int(val/mod)*mod + mod
47
48def indentLines (lines):
49 tabSize = 4
50
51 # Split into columns
52 lineColumns = [line.split("\t") for line in lines if line is not None]
53 if len(lineColumns) == 0:
54 return
55
56 numColumns = max(len(line) for line in lineColumns)
57
58 # Figure out max length per column
59 columnLengths = [nextMod(max(len(line[ndx]) for line in lineColumns if len(line) > ndx), tabSize) for ndx in range(numColumns)]
60
61 for line in lineColumns:
62 indented = []
63 for columnNdx, col in enumerate(line[:-1]):
64 colLen = len(col)
65 while colLen < columnLengths[columnNdx]:
66 col += "\t"
67 colLen = nextMod(colLen, tabSize)
68 indented.append(col)
69
70 # Append last col
71 indented.append(line[-1])
72 yield "".join(indented)
73
Pyry Haulos0779fba2016-08-10 12:28:05 -070074def readFile (filename):
75 f = open(filename, 'rb')
76 data = f.read()
77 f.close()
78 return data
79
80def writeFileIfChanged (filename, data):
Pyry Haulosca801e72016-11-17 15:26:29 -080081 if not os.path.exists(filename) or readFile(filename) != data:
Pyry Haulos0779fba2016-08-10 12:28:05 -070082 f = open(filename, 'wb')
83 f.write(data)
84 f.close()
85
Pyry Haulosa0178632014-11-21 14:56:21 -080086def writeLines (filename, lines):
Pyry Haulos0779fba2016-08-10 12:28:05 -070087 text = ""
88 for line in lines:
89 text += line
90 text += "\n"
91
92 writeFileIfChanged(filename, text)
Pyry Haulosa0178632014-11-21 14:56:21 -080093 print filename
94
95def writeInlFile (filename, header, source):
96 writeLines(filename, chain([header], source))
Pyry Haulos3c67e4f2014-12-19 15:45:39 -080097
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)