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