11#include <promeki/config.h>
12#if PROMEKI_ENABLE_CORE
16PROMEKI_NAMESPACE_BEGIN
34 static NumName parse(
const String &str,
int *val =
nullptr);
61 static NumName fromMask(
const String &mask);
73 NumName(
const String &prefix,
const String &suffix,
int digits,
bool padded)
74 : px(prefix), sx(suffix), dl(digits), pad(padded) {}
80 NumName(
const String &str) { *
this = parse(str); }
86 bool isValid()
const {
return dl > 0; }
93 String name(
int val)
const {
return px + String::number(val, 10, pad ? dl : 0,
'0') + sx; }
99 String prefix()
const {
return px; }
105 String suffix()
const {
return sx; }
111 bool isPadded()
const {
return pad; }
117 int digits()
const {
return dl; }
127 String filemask()
const {
131 mask += String::number(dl);
136 return px + mask + sx;
147 String hashmask()
const {
return px + String(pad ? dl : 1,
'#') + sx; }
150 bool operator==(
const NumName &other)
const {
151 return dl == other.dl && pad == other.pad && px == other.px && sx == other.sx;
155 bool operator!=(
const NumName &other)
const {
return !(*
this == other); }
166 bool isInSequence(
const NumName &n)
const {
167 if (!n.isValid() || n.px != px || n.sx != sx)
return false;
168 if (n.pad && !pad && n.dl > dl)
return false;
169 if (!n.pad && pad && dl > n.dl)
return false;
170 if (n.pad && pad && n.dl != dl)
return false;