Exemple #1
0
 std::string ToLeximitedHeader(u32 len)
 {
   std::ostringstream os;
   if (len < 9)
     os << len;
   else
     os << 9 << ToLeximitedHeader(DigitCount(len,10)) << len;
   return os.str();
 }
Exemple #2
0
  std::string ToLeximitedNumber(u32 num)
  {
    //returns 10 when 'num' is zero
    u32 digits = (num == 0 ? 1 : DigitCount(num, 10));

    std::ostringstream os;
    os << ToLeximitedHeader(digits) << num;

    return os.str();
  } //ToLeximitedNumber (unsigned)
Exemple #3
0
void
IntToCharArray(int64 *Input, char *Output)
{
	int64 tmp = *Input;
	char *NumCharPointer = Output + DigitCount(&tmp) - 1;

	while (tmp != 0)
	{
		*NumCharPointer-- = '0' + (tmp % 10);
		tmp = (tmp - *NumCharPointer) / 10;
	}
}
Exemple #4
0
  std::string ToLeximitedNumber(s32 num)
  {
    //handles negative numbers
    //returns 'n' before a negative num, e.g., -3 -> n13
    //returns '10' when 'num' is zero
    //returns 'n10' when 'num' is the biggest negative number
    bool useneg = false;
    u32 digits;
    if(num == 0)
      digits = 1;
    else if(num < 0)
      {
	// use 'n10' as a special code meaning 'max negative number'
        if (num == S32_MIN)
          {
            num = 0;
            digits = 1;
          }
        else
          {
            num = -num;
            digits = DigitCount((u32) num, 10);
          }
	useneg = true;
      }
    else //>0
      {
	digits = DigitCount((u32) num, 10);
      }

    std::ostringstream os;

    if(useneg)
      os << "n";

    os << ToLeximitedHeader(digits) << num;
    return os.str();
  } //ToLeximitedNumber (signed)
Exemple #5
0
  void IntLexEncode(u32 num, char* output)
  {
    u32 digits = DigitCount(num, 26);
    output[digits] = 0;

    /* Off by one case for the lazy*/
    if(!num)
    {
      output[0] = 'a';
      output[1] = 0;
    }
    else
    {
      while(num)
      {
	output[--digits] = 'a' + num % 26;
	num /= 26;
      }
    }
  }
#include <ionCore.h>
#include <catch.hpp>


TEST_CASE("ionUtils::DigitCount", "")
{
	CHECK(DigitCount(0) == 1);
	CHECK(DigitCount(1) == 1);
	CHECK(DigitCount(5) == 1);
	CHECK(DigitCount(9) == 1);
	CHECK(DigitCount(10) == 2);
	CHECK(DigitCount(11) == 2);
	CHECK(DigitCount(19) == 2);
	CHECK(DigitCount(20) == 2);
	CHECK(DigitCount(99) == 2);
	CHECK(DigitCount(100) == 3);
	CHECK(DigitCount(101) == 3);
	CHECK(DigitCount(1000) == 4);
	CHECK(DigitCount(1001) == 4);
	CHECK(DigitCount(9999) == 4);
	CHECK(DigitCount(10000) == 5);
	CHECK(DigitCount(10001) == 5);
	CHECK(DigitCount(34802) == 5);
	CHECK(DigitCount(2147483647) == 10);

	CHECK(DigitCount(-0) == 1);
	CHECK(DigitCount(-1) == 2);
	CHECK(DigitCount(-9) == 2);
	CHECK(DigitCount(-10) == 3);
	CHECK(DigitCount(-11) == 3);