/**
 * \file Integer.h
 * Classe de gestion d'entier de precision arbitraire.
 * 
 * @author Nicolas Janey
 * @author nicolas.janey@univ-fcomte.fr
 * @version 1.0, 01/01/10
 */

#ifndef ____INTEGER____
#define ____INTEGER____

class Integer {

  public :
    int bits;
    int *t;
    int biggestBit;

  public :
    Integer(short bits);
    Integer(int bits,int *b);
    Integer(int bits,int v);
    Integer(int bits,long v);
    Integer(int bits,Integer *v);
    Integer(int v);
    Integer(long v);
    Integer(Integer *v);
    ~Integer(void);
    void set(int bits,int *b);
    void set(int v);
    void set(long v);
    void set(Integer *v);
    int getInt(void);
    long getLong(void);
    int nul(void);
    int equal(Integer *v);
    int sup(Integer *v);
    int inf(Integer *v);
    int supOuEgal(Integer *v);
    int infOuEgal(Integer *v);
    int inc(void);
    int dec(void);
    int drift(int v);
    int add(Integer *v);
    int sub(Integer *v);
    int mul(Integer *v);
    int div(Integer *v);
    int mod(Integer *v);
    int nombreChiffres(int base);
    void sprintfb(char *s);
    void printfb(void);
    void sprintfo(char *s);
    void printfo(void);
    void sprintfd(char *s);
    void printfd(void);
    void sprintfh(char *s);
    void printfh(void);

#ifdef VISUAL_STUDIO
  public :
    Integer(int bits,long long v);
    Integer(long long v);
    void set(long long v);
    long long getLongLong(void);
#endif

};

#endif
