/* */ #include "AlphaNumberDecorator.h" #include namespace aria2 { namespace { std::string widen(const std::string& s, size_t width, char zeroChar) { std::string t = s; std::string zero(1, zeroChar); while(t.size() < width) { t.insert(0, zero); } return t; } } // namespace AlphaNumberDecorator::AlphaNumberDecorator(size_t width, bool uppercase) : width_(width), zero_(uppercase?'A':'a') {} AlphaNumberDecorator::~AlphaNumberDecorator() {} std::string AlphaNumberDecorator::decorate(unsigned int number) { if(number == 0) { return widen(std::string(1, zero_), width_, zero_); } int base = 26; char u[14]; // because if unsigned int is 64bit, which is the // biggest integer for the time being and number is // UINT64_MAX, you get "HLHXCZMXSYUMQP" size_t index = 0; do { unsigned int quot = number/base; unsigned int rem = number%base; u[index++] = zero_+rem; number = quot; } while(number); std::reverse(&u[0], &u[index]); return widen(std::string(&u[0], &u[index]), width_, zero_); } } // namespace aria2