Project SkyFire Core
SkyFire 5.4.8 server core API documentation
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
14namespace 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
std::uint32_t uint32
Definition Define.h:77
bool Intersects(Iterator1 first1, Iterator1 last1, Iterator2 first2, Iterator2 last2)
Definition Containers.h:56
void RandomResizeList(std::list< T > &list, uint32 size)
Definition Containers.h:19
C::value_type const & SelectRandomContainerElement(C const &container)
Definition Containers.h:48