1 #include <climits>
2 #include "xr_name_gen.h"
3 #include "xr_string_utils.h"
4
5 using namespace xray_re;
6
7 static const size_t k_reserved = 16;
8
9 // when mimic_gsc is true: pattern, pattern_0000, pattern_0001, ...
10 // otherwise: pattern0000, pattern0001, pattern0002, ...
init(const char * pattern,bool mimic_gsc)11 void xr_name_gen::init(const char* pattern, bool mimic_gsc)
12 {
13 size_t size = std::strlen(pattern);
14 m_name = new char[size + k_reserved];
15 std::memcpy(m_name, pattern, size + 1);
16 m_offset = unsigned(size & UINT_MAX);
17 if (mimic_gsc) {
18 m_next_idx = -1;
19 } else {
20 m_next_idx = 0;
21 std::memcpy(&m_name[m_offset], "0000", 5);
22 }
23 }
24
next()25 void xr_name_gen::next()
26 {
27 if (m_next_idx++ < 0)
28 m_name[m_offset++] = '_';
29 xr_snprintf(&m_name[m_offset], k_reserved - 1, "%4.4d", m_next_idx);
30 }
31