namespace R2C2 {
-ArticleNumber::ArticleNumber(unsigned n)
-{
- Part part;
- part.number = n;
- part.letter = 0;
- parts.push_back(part);
-}
-
-ArticleNumber::ArticleNumber(const string &s)
-{
- vector<string> sparts = split(s, '-');
- for(vector<string>::iterator i=sparts.begin(); i!=sparts.end(); ++i)
- {
- if(i->empty())
- throw InvalidParameterValue("Malformed article number");
+ArticleNumber::ArticleNumber(const string &a):
+ article(a)
+{ }
- unsigned nondigit = i->size();
- for(unsigned j=0; j<i->size(); ++j)
- if(!isdigit((*i)[j]))
- {
- nondigit = j;
- break;
- }
-
- if(!nondigit || nondigit<i->size()-1)
- throw InvalidParameterValue("Malformed article number");
-
- Part part;
- part.number = lexical_cast<unsigned>(i->substr(0, nondigit));
- part.letter = nondigit<i->size() ? (*i)[nondigit] : 0;
- parts.push_back(part);
- }
-}
+ArticleNumber::ArticleNumber(const string &v, const string &a, const string &p):
+ vendor(v),
+ article(a),
+ part(p)
+{ }
string ArticleNumber::str() const
{
string result;
- for(vector<Part>::const_iterator i=parts.begin(); i!=parts.end(); ++i)
+ if(!vendor.empty())
{
- if(!result.empty())
- result += '-';
-
- result += lexical_cast(i->number);
- if(i->letter)
- result += i->letter;
+ result += vendor;
+ result += ' ';
+ }
+ result += article;
+ if(!part.empty())
+ {
+ result += '-';
+ result += part;
}
return result;
}
-bool ArticleNumber::operator<(const ArticleNumber &other) const
-{
- return parts<other.parts;
-}
-
-bool ArticleNumber::Part::operator<(const Part &other) const
+ArticleNumber::Loader::Loader(ArticleNumber &an):
+ DataFile::ObjectLoader<ArticleNumber>(an)
{
- if(number!=other.number)
- return number<other.number;
- return letter<other.letter;
+ add("vendor", &ArticleNumber::vendor);
+ add("article", &ArticleNumber::article);
+ add("part", &ArticleNumber::part);
}
-void operator>>(const LexicalConverter &conv, ArticleNumber &art_nr)
-{
- art_nr = ArticleNumber(conv.get());
-}
-
void operator<<(LexicalConverter &conv, const ArticleNumber &art_nr)
{
conv.result(art_nr.str());