예제 #1
0
ATDecimalOrDerived::Ptr ItemFactoryImpl::createNonNegativeInteger(const MAPM value, const DynamicContext* context)
{
  if(value.is_integer() && value.sign() >= 0) {
    return new ATDecimalOrDerivedImpl(SchemaSymbols::fgURI_SCHEMAFORSCHEMA,
                                      SchemaSymbols::fgDT_NONNEGATIVEINTEGER, value, context);
  }

  return createDecimalOrDerived(
    SchemaSymbols::fgURI_SCHEMAFORSCHEMA,
    SchemaSymbols::fgDT_NONNEGATIVEINTEGER,
    value, context);
}
예제 #2
0
ATFloatOrDerivedImpl::
ATFloatOrDerivedImpl(const XMLCh* typeURI, const XMLCh* typeName, const MAPM value, const StaticContext* context):
    ATFloatOrDerived(),
    _typeName(typeName),
    _typeURI(typeURI) {

    _float = value;
    _state = NUM;
    if (value.sign() < 0)
        _state = NEG_NUM;
    checkFloatLimits(_state, _float);
}
예제 #3
0
파일: DateUtils.cpp 프로젝트: kanbang/Colt
MAPM DateUtils::convertDMY2Absolute(MAPM day, MAPM month, MAPM year)
{
  MAPM prevYear = year - 1;
  if(year.sign() < 0) ++prevYear;
  MAPM absolute = ( prevYear * 365 ) + prevYear.integer_divide(4) - prevYear.integer_divide(100) +
    prevYear.integer_divide(400);

  if(isLeapYear(year))
    absolute+=days_before_month_leap[asInt(month)-1];
  else
    absolute+=days_before_month[asInt(month)-1];
  absolute+= day;
  return absolute - 1;
}
예제 #4
0
파일: DateUtils.cpp 프로젝트: kanbang/Colt
void DateUtils::formatNumber(const MAPM &value, int minDigits, XMLBuffer &buffer)
{
  char obuf[1024];
  value.toIntegerString(obuf);

  char *str = obuf;
  if(value.sign() < 0) {
    ++str;
    buffer.append(chDash);
  }

  size_t length = strlen(str);
  for(int i = (int)length; i < minDigits; ++i) {
    buffer.append(chDigit_0);
  }

  buffer.append(X(str));
}
예제 #5
0
파일: DateUtils.cpp 프로젝트: kanbang/Colt
void DateUtils::convertAbsolute2DMY(MAPM absolute, MAPM& day, MAPM& month, MAPM& year)
{
  absolute += 1;

  bool bc = absolute.sign() <= 0;
  bool fix = false;

  MAPM div, rem;
  absolute.integer_div_rem(days_in_400_years, div, rem);
  year = div * 400;
  absolute = rem;

  absolute.integer_div_rem(days_in_100_years, div, rem);
  if(div <= -4) fix = true;
  if(div >= 4) {
    div -= 1;
    rem += days_in_100_years;
  }
  year += div * 100;
  absolute = rem;

  absolute.integer_div_rem(days_in_4_years, div, rem);
  year += div * 4;
  absolute = rem;

  absolute.integer_div_rem(days_in_1_years, div, rem);
  if(div <= -4) fix = true;
  if(div >= 4) {
    div -= 1;
    rem += days_in_1_years;
  }
  year += div;
  absolute = rem;

  if(bc) {
    if(fix && absolute.sign() == 0) {
      // Correct off by one error in year calculations
      // due to negative leap years
      absolute += 1;
    }
    else {
      --year;
      absolute += daysInYear(year);
    }
  }
  else {
    if(absolute.sign() != 0) {
      ++year;
    }
  }

  month = 12;
  day = 31;
  int *days = isLeapYear(year) ? days_before_month_leap : days_before_month;
  for(int i = 11; i >= 0; --i) {
    if(absolute > days[i]) {
      month = i + 1;
      day = absolute - days[i];
      break;
    }
  }
}
예제 #6
0
파일: integer.cpp 프로젝트: alyst/zorba
typename IntegerImpl<T>::value_type IntegerImpl<T>::ftoi( MAPM const &d ) {
  MAPM const temp( d.sign() >= 0 ? d.floor() : d.ceil() );
  unique_ptr<char[]> const buf( new char[ temp.exponent() + 3 ] );
  temp.toIntegerString( buf.get() );
  return ztd::aton<value_type>( buf.get() );
}