⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 spisakbitova.cpp

📁 pc paralel port programming
💻 CPP
字号:
// SpisakBitova.cpp: implementation of the CSpisakBitova class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "SpisakBitova.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CSpisakBitova::CSpisakBitova()
    : maskaZaSveBitove_m(0)
{
}

CSpisakBitova::~CSpisakBitova()
{

}

void CSpisakBitova::Dodaj(int bitMaska, int pozicija, bool pinInvertovan)
{
    if (pozicija >= 0) {
        spisakBitova_m.push_back(CBitDef(bitMaska, pozicija, pinInvertovan));
        maskaZaSveBitove_m |= bitMaska;
    }
}

int CSpisakBitova::FormirajMaskuZaSveBitove(void)
{
    return maskaZaSveBitove_m;
}

int CSpisakBitova::PozicijaBita(int bitMaska)
{
    int pozicija = 0;
    CBitDef bitDef;
    if (DajBitDef(bitMaska, bitDef)) {
        pozicija = bitDef.pozicija;
    }
    return pozicija;
}

bool CSpisakBitova::PinInvertovan(int bitMaska)
{
    bool invertovan = false;
    CBitDef bitDef;
    if (DajBitDef(bitMaska, bitDef)) {
        invertovan = bitDef.pinInvertovan;
    }
    return invertovan;
}

int CSpisakBitova::IzdvojiMaskuZaBitSaNajnizomPozicijom(int bitMaska)
{
    int maska = 0;
    int minPoz = INT_MAX;
    tSpisakBitova::const_iterator spisakEnd = spisakBitova_m.end();
    for (tSpisakBitova::const_iterator b_iter = spisakBitova_m.begin(); b_iter != spisakEnd; ++b_iter) {
        if ((*b_iter).bitMaska & bitMaska) {
            if ((*b_iter).pozicija < minPoz){
                maska = (*b_iter).bitMaska;
                minPoz = (*b_iter).pozicija;
            }
        }
    }
    return maska;
}

void CSpisakBitova::InvertujPinoveSaInverznomLogikom(int& sadrzaj)
{
    tSpisakBitova::const_iterator spisakEnd = spisakBitova_m.end();
    for (tSpisakBitova::const_iterator b_iter = spisakBitova_m.begin(); b_iter != spisakEnd; ++b_iter) {
        if ((*b_iter).pinInvertovan) {
            sadrzaj ^= (0x01 << ((*b_iter).pozicija)); // XOR sa 1 je negacija
        }
    }
}

//////////////////////////////////////////////////////////////////////
// Pomocne funkcije
//////////////////////////////////////////////////////////////////////

bool CSpisakBitova::DajBitDef(int bitMaska, CBitDef& bitDef)
{
    bool bNaso = false;

    tSpisakBitova::const_iterator spisakEnd = spisakBitova_m.end();
    for (tSpisakBitova::iterator b_iter = spisakBitova_m.begin(); b_iter != spisakEnd; ++b_iter) {
        if ((*b_iter).bitMaska == bitMaska) {
            bitDef = (*b_iter);
            bNaso = true;
            break;
        }
    }

    return bNaso;
}

void CSpisakBitova::PostaviParametre(int pomeraj)
{
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -