Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Toggle main menu visibility
Loading...
Searching...
No Matches
Containers.h
Go to the documentation of this file.
1
/*
2
* This file is part of Project SkyFire https://www.projectskyfire.org.
3
* See LICENSE.md file for Copyright information
4
*/
5
6
#ifndef SKYFIRE_CONTAINERS_H
7
#define SKYFIRE_CONTAINERS_H
8
9
#include "
Define.h
"
10
11
#include <cstdlib>
12
#include <list>
13
14
namespace
Skyfire
15
{
16
namespace
Containers
17
{
18
template
<
class
T>
19
void
RandomResizeList
(std::list<T>& list,
uint32
size)
20
{
21
size_t
list_size = list.size();
22
23
while
(list_size > size)
24
{
25
typename
std::list<T>::iterator itr = list.begin();
26
std::advance(itr, std::rand() % list_size);
27
list.erase(itr);
28
--list_size;
29
}
30
}
31
32
template
<
class
T,
class
Predicate>
33
void
RandomResizeList
(std::list<T>& list, Predicate& predicate,
uint32
size)
34
{
36
std::list<T> listCopy;
37
for
(
typename
std::list<T>::iterator itr = list.begin(); itr != list.end(); ++itr)
38
if
(predicate(*itr))
39
listCopy.push_back(*itr);
40
41
if
(size)
42
RandomResizeList
(listCopy, size);
43
44
list = listCopy;
45
}
46
47
/* Select a random element from a container. Note: make sure you explicitly empty check the container */
48
template
<
class
C>
typename
C::value_type
const
&
SelectRandomContainerElement
(C
const
& container)
49
{
50
typename
C::const_iterator it = container.begin();
51
std::advance(it, std::rand() % container.size());
52
return
*it;
53
}
54
55
template
<
class
Iterator1,
class
Iterator2>
56
bool
Intersects
(Iterator1 first1, Iterator1 last1, Iterator2 first2, Iterator2 last2)
57
{
58
while
(first1 != last1 && first2 != last2)
59
{
60
if
(*first1 < *first2)
61
++first1;
62
else
if
(*first2 < *first1)
63
++first2;
64
else
65
return
true
;
66
}
67
68
return
false
;
69
}
70
}
71
72
}
74
75
#endif
Define.h
uint32
std::uint32_t uint32
Definition
Define.h:77
Skyfire::Containers
Definition
Containers.h:17
Skyfire::Containers::Intersects
bool Intersects(Iterator1 first1, Iterator1 last1, Iterator2 first2, Iterator2 last2)
Definition
Containers.h:56
Skyfire::Containers::RandomResizeList
void RandomResizeList(std::list< T > &list, uint32 size)
Definition
Containers.h:19
Skyfire::Containers::SelectRandomContainerElement
C::value_type const & SelectRandomContainerElement(C const &container)
Definition
Containers.h:48
Skyfire
Definition
AuthPatchTransfer.h:12
src
server
shared
Containers.h
Generated on
for Project SkyFire Core by
1.17.0