#ifndef BIG_NUMHELPER_H
#define BIG_NUMHELPER_H
/* -*-C++-*-
 *****************************************************************************
 *
 * File:         BigNumHelper.h
 * Description:  Definition of class BigNumHelper
 * Created:      03/29/99
 * Language:     C++
 *
 *
// @@@ START COPYRIGHT @@@
//
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements.  See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership.  The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License.  You may obtain a copy of the License at
//
//   http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied.  See the License for the
// specific language governing permissions and limitations
// under the License.
//
// @@@ END COPYRIGHT @@@
 *
 *
 *****************************************************************************
 */

#include "Int64.h"
#include "NAType.h"

#define MSB_CLR_MSK     0x7F
#define MSB_SET_MSK     0x80

#ifdef NA_LITTLE_ENDIAN
  #define BIGN_CLR_SIGN(bignum, len) (((char*)bignum)[len - 1] &= MSB_CLR_MSK);
  #define BIGN_SET_SIGN(bignum, len) (((char*)bignum)[len - 1] |= MSB_SET_MSK);
  #define BIGN_GET_SIGN(bignum, len) \
    ((char)(((char*)bignum)[len - 1] & MSB_SET_MSK));
#else
  #define BIGN_CLR_SIGN(bignum, len) (((char*)bignum)[len - 2] &= MSB_CLR_MSK);
  #define BIGN_SET_SIGN(bignum, len) (((char*)bignum)[len - 2] |= MSB_SET_MSK);
  #define BIGN_GET_SIGN(bignum, len) \
    ((char)(((char*)bignum)[len - 2] & MSB_SET_MSK));
#endif

class BigNumHelper {

public:

// The following method adds two Big Nums (without signs).
static short AddHelper(Lng32 dataLength,
		       char * leftData,
		       char * rightData,
		       char * resultData);

// The following method subtracts one Big Num from another (without signs).
static short SubHelper(Lng32 dataLength,
		       char * leftData,
		       char * rightData,
		       char * resultData);

// The following method multiplies two Big Nums (without signs).
// The assumption is that the result is big enough to hold the
// product.
static short MulHelper(Lng32 resultLength,
                       Lng32 leftLength,
		       Lng32 rightLength,
		       char * leftData,
		       char * rightData,
		       char * resultData);

// The following method divides one Big Num by another (both without signs),
// only if the divisor fits in an unsigned short. It returns 1 if there is
// a remainder, 0 if there is no remainder, and -1 if there is an error.
static short SimpleDivHelper(Lng32 dividendLength,
			     Lng32 divisorLength,
			     char * dividendData,
			     char * divisorData,
			     char * quotientData);

// The following method divides one Big Num by another (both without signs).
// It returns 1 if there is a remainder, 0 if there is no remainder. 
static short DivHelper(Lng32 dividendLength,
		       Lng32 divisorLength,
		       char * dividendData,
		       char * divisorData,
		       char * quotientData,
                       char * tempData);

// The following method converts a given Big Num (without sign) into
// its equivalent BCD string representation (with the more significant decimal
// digits in the lower addresses).
static short ConvBigNumToBcdHelper(Lng32 sourceLength,
			           Lng32 targetLength,
			           char * sourceData,
			           char * targetData,
                                   NAMemory * heap);

// The following method converts a given BCD string representation (without sign,
// and with the more significant decimal digits in the lower addresses) 
// into its equivalent Big Num representation.
static short ConvBcdToBigNumHelper(Lng32 sourceLength,
			           Lng32 targetLength,
			           char * sourceData,
			           char * targetData);

// The following method converts a given Big Num (with sign) into
// its equivalent BCD string representation (with the more significant
// decimal digits in the lower addresses).
static short ConvBigNumWithSignToBcdHelper(Lng32 sourceLength,
			                   Lng32 targetLength,
			                   char * sourceData,
			                   char * targetData,
                                           NAMemory * heap);

// The following method converts a given BCD string representation 
// (with sign, and with the more significant decimal digits in the lower
// addresses) into its equivalent Big Num representation.
static short ConvBcdToBigNumWithSignHelper(Lng32 sourceLength,
			                   Lng32 targetLength,
			                   char * sourceData,
			                   char * targetData);

// The following method converts a given Big Num (without sign) into
// its equivalent ASCII string representation (with the more significant
// decimal digits in the lower addresses).
static short ConvBigNumToAsciiHelper(Lng32 sourceLength,
			             Lng32 targetLength,
			             char * sourceData,
			             char * targetData,
                                     NAMemory * heap);

// The following method converts a given ASCII string representation 
// (without sign, and with the more significant decimal digits in the lower
// addresses) into its equivalent Big Num representation.
static short ConvAsciiToBigNumHelper(Lng32 sourceLength,
			             Lng32 targetLength,
			             char * sourceData,
			             char * targetData);

// The following method converts a given Big Num (with sign) into
// its equivalent ASCII string representation (with the more significant
// decimal digits in the lower addresses).
static short ConvBigNumWithSignToAsciiHelper(Lng32 sourceLength,
			                     Lng32 targetLength,
			                     char * sourceData,
			                     char * targetData,
                                             NAMemory * heap);

// The following method converts a given ASCII string representation 
// (with sign, and with the more significant decimal digits in the lower
// addresses) into its equivalent Big Num representation.
static short ConvAsciiToBigNumWithSignHelper(Lng32 sourceLength,
			                     Lng32 targetLength,
			                     char * sourceData,
			                     char * targetData);

// Given a desired precision of a Big Num, the following method calculates 
// the required storage length (including the sign). We assume that the
// precision is > 0.  Storage will always be at a minimum 8 bytes.
static Lng32 ConvPrecisionToStorageLengthHelper(Lng32 precision);

// The following method converts an integer, 10^exponent, to a Big Num 
// representation (without sign). The given exponent should be >= 0.
static short ConvPowersOfTenToBigNumHelper(Lng32 exponent,
                                           Lng32 targetLength,
                                           Lng32 * finalTargetLength,
                                           char * targetData);

// The following converts an Int64 to a Big Num (with sign).
static short ConvInt64ToBigNumWithSignHelper(Lng32 targetLength,
                                             Int64 sourceData,
                                             char * targetData,
                                             NABoolean isUnsigned);

// The following converts a Big Num (with sign) into an Int64.
static short ConvBigNumWithSignToInt64Helper(Lng32 sourceLength,
                                             char * sourceData,
                                             void * targetData,
                                             NABoolean isUnsigned);

// The following converts a BIGNUM (with sign) into Int64 and scale it, 
// returning information about the conversion to the caller (e.g. 
// truncations, overflows). 
//
// The return value can have 5 possible values:
//   0: the conversion was ok
//   1: the result was rounded up to LLONG_MIN
//   2: the result was rounded down to LLONG_MAX
//   3: the result was rounded up
//   4: the result was rounded down
static short ConvBigNumWithSignToInt64AndScaleHelper(Lng32 sourceLength,
                                                     char * sourceData,
                                                     Int64 * targetData,
                                                     Lng32 exponent,
                                                     NAMemory * heap);

// The following converts a Big Num to a Big Num.
static short ConvBigNumWithSignToBigNumWithSignHelper(Lng32 sourceLength,
                                                      Lng32 targetLength,
                                                      char * sourceData,
                                                      char * targetData);


};

#endif // BIG_NUMHELPER_H
