#pragma once
#include "Hardware.h"
#include "dll_macro.h"
struct innerGroupAffinity;
namespace mikesolar {
    template<typename T>
    class List;
}
class DLL_API GroupAffinity
{
public:

    GroupAffinity(unsigned short group, unsigned long mask);
    GroupAffinity(std::shared_ptr<innerGroupAffinity> inner);

    bool isNull() const;
    static GroupAffinity Undifined();
    static GroupAffinity Single(unsigned short group, int index);
    unsigned short Group();
    unsigned long Mask();
    //public override bool Equals(object o)
    int GetHashCode();
    bool operator==(const GroupAffinity &other) const;
    //static bool operator !=(GroupAffinity a1, GroupAffinity a2);
    ~GroupAffinity();
private:
    std::shared_ptr<innerGroupAffinity> inner;
};

