1 //
2 // Copyright 2014 The ANGLE Project Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
5 //
6 
7 #include "common/angleutils.h"
8 #include "common/debug.h"
9 
10 #include <stdio.h>
11 
12 #include <limits>
13 #include <vector>
14 
15 namespace angle
16 {
17 // dirtyPointer is a special value that will make the comparison with any valid pointer fail and
18 // force the renderer to re-apply the state.
19 const uintptr_t DirtyPointer = std::numeric_limits<uintptr_t>::max();
20 }  // namespace angle
21 
ArrayString(unsigned int i)22 std::string ArrayString(unsigned int i)
23 {
24     // We assume that UINT_MAX and GL_INVALID_INDEX are equal.
25     ASSERT(i != UINT_MAX);
26 
27     std::stringstream strstr;
28     strstr << "[";
29     strstr << i;
30     strstr << "]";
31     return strstr.str();
32 }
33 
ArrayIndexString(const std::vector<unsigned int> & indices)34 std::string ArrayIndexString(const std::vector<unsigned int> &indices)
35 {
36     std::stringstream strstr;
37 
38     for (auto indicesIt = indices.rbegin(); indicesIt != indices.rend(); ++indicesIt)
39     {
40         // We assume that UINT_MAX and GL_INVALID_INDEX are equal.
41         ASSERT(*indicesIt != UINT_MAX);
42         strstr << "[";
43         strstr << (*indicesIt);
44         strstr << "]";
45     }
46 
47     return strstr.str();
48 }
49 
FormatStringIntoVector(const char * fmt,va_list vararg,std::vector<char> & outBuffer)50 size_t FormatStringIntoVector(const char *fmt, va_list vararg, std::vector<char> &outBuffer)
51 {
52     va_list varargCopy;
53     va_copy(varargCopy, vararg);
54 
55     int len = vsnprintf(nullptr, 0, fmt, vararg);
56     ASSERT(len >= 0);
57 
58     outBuffer.resize(len + 1, 0);
59 
60     len = vsnprintf(outBuffer.data(), outBuffer.size(), fmt, varargCopy);
61     va_end(varargCopy);
62     ASSERT(len >= 0);
63     return static_cast<size_t>(len);
64 }
65