Fillwave  10.0.0
Macros.h
1 #pragma once
2 
3 /*
4  * The MIT License (MIT)
5  *
6  * Copyright (c) 2018 Filip Wasil and Fillwave community members
7  *
8  * Permission is hereby granted, free of charge, to any person
9  * obtaining a copy of this software and associated documentation files (the "Software"),
10  * to deal in the Software without restriction, including without limitation the rights
11  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
12  * and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
13  *
14  * The above copyright notice and this permission notice shall be included
15  * in all copies or substantial portions of the Software.
16  *
17  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
18  * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19  * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
20  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22  */
23 
24 #include <algorithm>
25 #include <memory>
26 #include <vector>
27 
28 namespace flw {
29 namespace flf {
30 
31 template <class T>
32 void remove(std::vector<T> &vec, T &item) {
33  auto new_end = std::remove_if(vec.begin(), vec.end(), [item](const std::unique_ptr<T> &l) {
34  return item == l.get();
35  });
36  vec.erase(new_end, vec.end());
37 }
38 
39 template <typename TContainer>
40 void vectorForward(std::unique_ptr<TContainer> &) {
41 }
42 
43 template <typename TContainer, typename TCurrent, typename... TNext>
44 void vectorForward(std::unique_ptr<TContainer> &container, TCurrent &&t, TNext &&... args) {
45  container->push_back(std::move(t));
46  vectorForward(container, args...);
47 }
48 
49 template <typename CONTAINER, typename TCURRENT, typename... TNEXT>
50 std::unique_ptr<CONTAINER> make_unique_container(TCURRENT &&t, TNEXT &&... args) {
51  std::unique_ptr<CONTAINER> container = std::make_unique<CONTAINER>();
52  container->push_back(std::move(t));
53  vectorForward<CONTAINER>(container, args...);
54  return std::move(container);
55 }
56 
57 #if (!defined UINT_MAX)
58 # define UINT_MAX (~((unsigned int)0))
59 #endif
60 
61 /*
62  template<typename T>
63  using shared_ptr_unsynchronized = std::__shared_ptr<T, __gnu_cxx::_S_single>;
64  */
65 
66 } /* flf */
67 } /* flw */
68 
69 #ifdef __unix
70 int fopen_s(FILE **f, const char *name, const char *mode);
71 #else
72 #include <stdio.h>
73 #endif
Definition: Aliases.h:30