xref: /aosp_15_r20/external/deqp/framework/randomshaders/rsgNameAllocator.cpp (revision 35238bce31c2a825756842865a792f8cf7f89930)
1 /*-------------------------------------------------------------------------
2  * drawElements Quality Program Random Shader Generator
3  * ----------------------------------------------------
4  *
5  * Copyright 2014 The Android Open Source Project
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19  *//*!
20  * \file
21  * \brief Name Allocator.
22  *//*--------------------------------------------------------------------*/
23 
24 #include "rsgNameAllocator.hpp"
25 
26 namespace rsg
27 {
28 
NameAllocator(void)29 NameAllocator::NameAllocator(void) : m_nextName(1)
30 {
31 }
32 
~NameAllocator(void)33 NameAllocator::~NameAllocator(void)
34 {
35 }
36 
nameNdxToStr(uint32_t name)37 inline std::string nameNdxToStr(uint32_t name)
38 {
39     std::string str      = "";
40     uint32_t alphabetLen = 'z' - 'a' + 1;
41 
42     while (name > alphabetLen)
43     {
44         str.insert(str.begin(), (char)('a' + ((name - 1) % alphabetLen)));
45         name = ((name - 1) / alphabetLen);
46     }
47 
48     str.insert(str.begin(), (char)('a' + (name % (alphabetLen + 1)) - 1));
49 
50     return str;
51 }
52 
allocate(void)53 std::string NameAllocator::allocate(void)
54 {
55     DE_ASSERT(m_nextName != 0);
56     return nameNdxToStr(m_nextName++);
57 }
58 
59 } // namespace rsg
60