1
#include "PreCompiled.h"
3
#include "ElementNamingUtils.h"
4
#include <boost/algorithm/string/predicate.hpp>
7
const char *Data::isMappedElement(const char *name) {
8
if(name && boost::starts_with(name, ELEMENT_MAP_PREFIX))
9
return name + ELEMENT_MAP_PREFIX_SIZE;
13
std::string Data::newElementName(const char *name) {
16
const char *dot = strrchr(name,'.');
19
const char *c = dot-1;
26
if(isMappedElement(c))
27
return std::string(name,dot-name);
31
std::string Data::oldElementName(const char *name) {
34
const char *dot = strrchr(name,'.');
37
const char *c = dot-1;
44
if(isMappedElement(c))
45
return std::string(name,c-name)+(dot+1);
49
std::string Data::noElementName(const char *name) {
52
auto element = findElementName(name);
54
return std::string(name,element-name);
58
const char *Data::findElementName(const char *subname) {
60
while(subname && subname[0] == '.')
62
if(!subname || !subname[0] || isMappedElement(subname))
64
const char *dot = strrchr(subname,'.');
67
const char *element = dot+1;
68
if(dot==subname || isMappedElement(element))
70
for(--dot;dot!=subname;--dot) {
76
if(isMappedElement(dot))
81
bool Data::hasMissingElement(const char *subname) {
84
auto dot = strrchr(subname,'.');
87
return boost::starts_with(subname, MISSING_PREFIX);
90
const char *Data::hasMappedElementName(const char *subname) {
91
return isMappedElement(findElementName(subname));
94
const std::string Data::indexSuffix(int index, const char *label)
96
if ( index < 2 ) { // Don't add a suffix for item #1, begin appending at 2
99
std::string name(label);
100
name += std::to_string(index);