// BVector.h
// Copyright (c) 2015 Nonki Takahashi.  The MIT License.
// Version 0.2
//
// The following ifdef block is the standard way of creating macros which make exporting 
// from a DLL simpler. All files within this DLL are compiled with the BVECTOR_EXPORTS
// symbol defined on the command line. This symbol should not be defined on any project
// that uses this DLL. This way any other project whose source files include this file see 
// BVECTOR_API functions as being imported from a DLL, whereas this DLL sees symbols
// defined with this macro as being exported.
#ifdef BVECTOR_EXPORTS
#define BVECTOR_API __declspec(dllexport)
#else
#define BVECTOR_API __declspec(dllimport)
#endif

// This class is exported from the BVector.dll
#include <string>
using namespace std;

class BVECTOR_API CBVector {
    int order = 0;
    int size = 0;
    int* bits = 0;
    string name = "";
public:
    CBVector(void);
    // TODO: add your methods here.
    CBVector(int, string name = "");
    CBVector(int, int[], string name = "");
    ~CBVector(void);
    void operator=(CBVector &);
    void clear(void);
    void setValue(int, int);
    int getValue(int);
    int getOrder(void);
    int abs(void);
    CBVector inv(void);
    bool equals(CBVector);
    CBVector or(CBVector);
    CBVector diff(CBVector);
    CBVector and(CBVector);
    CBVector xor(CBVector);
    CBVector mul(int);
    int dot(CBVector);
    string toString(void);
    static void releaseMem(void);
};

extern BVECTOR_API int nBVector;

BVECTOR_API int fnBVector(void);