mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 21:22:46 +00:00 
			
		
		
		
	 ae3ffdd521
			
		
	
	
		ae3ffdd521
		
	
	
	
	
		
			
			This patch adds the `USING_AK_GLOBALLY` macro which is enabled by default, but can be overridden by build flags. This is a step towards integrating Jakt and AK types.
		
			
				
	
	
		
			40 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			40 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*
 | |
|  * Copyright (c) 2021, the SerenityOS developers.
 | |
|  *
 | |
|  * SPDX-License-Identifier: BSD-2-Clause
 | |
|  */
 | |
| 
 | |
| #pragma once
 | |
| 
 | |
| #include <AK/IntrusiveList.h>
 | |
| 
 | |
| namespace AK {
 | |
| namespace Detail {
 | |
| 
 | |
| template<class T, typename Container, IntrusiveListNode<T, Container> T::*member>
 | |
| class IntrusiveListRelaxedConst : public IntrusiveList<T, Container, member> {
 | |
|     AK_MAKE_NONCOPYABLE(IntrusiveListRelaxedConst);
 | |
|     AK_MAKE_NONMOVABLE(IntrusiveListRelaxedConst);
 | |
| 
 | |
| public:
 | |
|     using IntrusiveList<T, Container, member>::IntrusiveList;
 | |
| 
 | |
|     using Iterator = typename IntrusiveList<T, Container, member>::Iterator;
 | |
| 
 | |
|     Iterator begin() const { return const_cast<IntrusiveListRelaxedConst*>(this)->IntrusiveList<T, Container, member>::begin(); }
 | |
|     Iterator end() const { return Iterator {}; }
 | |
| };
 | |
| 
 | |
| }
 | |
| 
 | |
| template<auto member>
 | |
| using IntrusiveListRelaxedConst = Detail::IntrusiveListRelaxedConst<
 | |
|     decltype(Detail::ExtractIntrusiveListTypes::value(member)),
 | |
|     decltype(Detail::ExtractIntrusiveListTypes::container(member)),
 | |
|     member>;
 | |
| 
 | |
| }
 | |
| 
 | |
| #if USING_AK_GLOBALLY
 | |
| using AK::IntrusiveListRelaxedConst;
 | |
| #endif
 |