1// SuperTux
2// Copyright (C) 2018 Ingo Ruhnke <grumbel@gmail.com>
3//
4// This program is free software: you can redistribute it and/or modify
5// it under the terms of the GNU General Public License as published by
6// the Free Software Foundation, either version 3 of the License, or
7// (at your option) any later version.
8//
9// This program is distributed in the hope that it will be useful,
10// but WITHOUT ANY WARRANTY; without even the implied warranty of
11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12// GNU General Public License for more details.
13//
14// You should have received a copy of the GNU General Public License
15// along with this program. If not, see <http://www.gnu.org/licenses/>.
16
17#include "util/uid_generator.hpp"
18
19#include "util/log.hpp"
20
21uint8_t UIDGenerator::s_magic_counter = 1;
22
23UIDGenerator::UIDGenerator() :
24 m_magic(s_magic_counter++),
25 m_id_counter()
26{
27 if (s_magic_counter == 0)
28 {
29 s_magic_counter = 1;
30 }
31}
32
33UID
34UIDGenerator::next()
35{
36 m_id_counter += 1;
37
38 if (m_id_counter > 0xffffff)
39 {
40 log_warning << "UIDGenerator overflow" << std::endl;
41 m_id_counter = 0;
42 }
43
44 return UID((m_magic << 24) | m_id_counter);
45}
46
47/* EOF */
48