mirror of
				https://github.com/OpenMW/openmw.git
				synced 2025-11-04 12:26:39 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			45 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
#ifndef OPENMW_COMPONENTS_ESMLOADER_RECORD_H
 | 
						|
#define OPENMW_COMPONENTS_ESMLOADER_RECORD_H
 | 
						|
 | 
						|
#include <components/esm3/loadcell.hpp>
 | 
						|
#include <components/misc/algorithm.hpp>
 | 
						|
 | 
						|
#include <algorithm>
 | 
						|
#include <utility>
 | 
						|
#include <vector>
 | 
						|
 | 
						|
namespace EsmLoader
 | 
						|
{
 | 
						|
    template <class T>
 | 
						|
    struct Record
 | 
						|
    {
 | 
						|
        bool mDeleted;
 | 
						|
        T mValue;
 | 
						|
 | 
						|
        template <class... Args>
 | 
						|
        explicit Record(bool deleted, Args&&... args)
 | 
						|
            : mDeleted(deleted)
 | 
						|
            , mValue(std::forward<Args>(args)...)
 | 
						|
        {
 | 
						|
        }
 | 
						|
    };
 | 
						|
 | 
						|
    template <class T>
 | 
						|
    using Records = std::vector<Record<T>>;
 | 
						|
 | 
						|
    template <class T, class GetKey>
 | 
						|
    inline std::vector<T> prepareRecords(Records<T>& records, const GetKey& getKey)
 | 
						|
    {
 | 
						|
        const auto greaterByKey = [&](const auto& l, const auto& r) { return getKey(r) < getKey(l); };
 | 
						|
        const auto equalByKey = [&](const auto& l, const auto& r) { return getKey(l) == getKey(r); };
 | 
						|
        std::stable_sort(records.begin(), records.end(), greaterByKey);
 | 
						|
        std::vector<T> result;
 | 
						|
        Misc::forEachUnique(records.rbegin(), records.rend(), equalByKey, [&](const auto& v) {
 | 
						|
            if (!v.mDeleted)
 | 
						|
                result.emplace_back(std::move(v.mValue));
 | 
						|
        });
 | 
						|
        return result;
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
#endif
 |