eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingStruktura do przydzielania numerkówRe: Struktura do przydzielania numerków
  • Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.
    atman.pl!.POSTED!not-for-mail
    From: Borneq <b...@a...hidden.pl>
    Newsgroups: pl.comp.programming
    Subject: Re: Struktura do przydzielania numerków
    Date: Mon, 7 Dec 2015 01:05:49 +0100
    Organization: ATMAN - ATM S.A.
    Lines: 42
    Message-ID: <n42ige$9pq$1@node1.news.atman.pl>
    References: <n3s6h0$itv$1@node2.news.atman.pl> <n3s7d4$js6$1@node2.news.atman.pl>
    <3...@g...com>
    <n3sapd$trt$1@node1.news.atman.pl>
    <f...@g...com>
    <n3t46b$ol1$1@node1.news.atman.pl> <n3t8qq$tv4$1@node1.news.atman.pl>
    <n3u7o7$rbe$1@node1.news.atman.pl> <n41nka$cvu$1@node1.news.atman.pl>
    NNTP-Posting-Host: 91.239.205.105
    Mime-Version: 1.0
    Content-Type: text/plain; charset=utf-8; format=flowed
    Content-Transfer-Encoding: 8bit
    X-Trace: node1.news.atman.pl 1449446734 10042 91.239.205.105 (7 Dec 2015 00:05:34
    GMT)
    X-Complaints-To: u...@a...pl
    NNTP-Posting-Date: Mon, 7 Dec 2015 00:05:34 +0000 (UTC)
    User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:38.0) Gecko/20100101
    Thunderbird/38.4.0
    In-Reply-To: <n41nka$cvu$1@node1.news.atman.pl>
    Xref: news-archive.icm.edu.pl pl.comp.programming:208981
    [ ukryj nagłówki ]

    W dniu 2015-12-06 o 17:26, bartekltg pisze:
    > Czasowo jest gorsze.
    > Pamięćiowo najprawdopoobnij też (ile na raz okien będzie otwartych?),
    > a te dodatkowe 32 bity chyba nie są takim wqielkim narzutem, skoro
    > jadna liczba przyopada na okno (bardziej skomplikowaną strukturę).
    >
    > Nie mówiąc o tym, że trudniejsze do napsiania;-)

    A to za to bardzo proste:
    yAllocFifo::yAllocFifo(const uint32_t base, const uint32_t count)
    {
    alloc_base = base;
    alloc_count = count;
    sentinel = base + count;
    nextNumber = base;
    }

    uint32_t yAllocFifo::getNumber()
    {
    if (fifo.canPop()) return fifo.pop();
    else
    {
    if (nextNumber >= sentinel) throw exception("no more nmbers");
    nextNumber++;
    return nextNumber-1;
    }
    return 0;
    }

    void yAllocFifo::releaseNumber(uint32_t number)
    {
    if (number < alloc_base)
    throw exception("releaseNumber: bad number, too small");
    if (number - alloc_base >= alloc_count)
    throw exception("releaseNumber: bad number, too big");
    fifo.push(number);
    }


    tylko nie sprawdza nic przy release, np. gdy zwalniamy już zwolnione to
    wtedy doda dwa razy, albo zwalniamy zupełnie inny numer, którego nie
    wzięliśmy.

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: