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