mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-30 21:30:04 +00:00 
			
		
		
		
	Common: Add a clone of std::make_unique
This commit is contained in:
		
							parent
							
								
									f1309e6bf0
								
							
						
					
					
						commit
						82528ba7df
					
				
					 5 changed files with 31 additions and 10 deletions
				
			
		|  | @ -49,6 +49,7 @@ set(HEADERS | |||
|             logging/filter.h | ||||
|             logging/log.h | ||||
|             logging/backend.h | ||||
|             make_unique.h | ||||
|             math_util.h | ||||
|             mem_arena.h | ||||
|             memory_util.h | ||||
|  |  | |||
							
								
								
									
										16
									
								
								src/common/make_unique.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								src/common/make_unique.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,16 @@ | |||
| // Copyright 2014 Citra Emulator Project
 | ||||
| // Licensed under GPLv2 or any later version
 | ||||
| // Refer to the license.txt file included.
 | ||||
| 
 | ||||
| #pragma once | ||||
| 
 | ||||
| #include <memory> | ||||
| 
 | ||||
| namespace Common { | ||||
| 
 | ||||
| template <typename T, typename... Args> | ||||
| std::unique_ptr<T> make_unique(Args&&... args) { | ||||
|     return std::unique_ptr<T>(new T(std::forward<Args>(args)...)); | ||||
| } | ||||
| 
 | ||||
| } // namespace
 | ||||
|  | @ -5,6 +5,7 @@ | |||
| #include <memory> | ||||
| 
 | ||||
| #include "common/common_types.h" | ||||
| #include "common/make_unique.h" | ||||
| 
 | ||||
| #include "core/file_sys/archive_romfs.h" | ||||
| #include "core/file_sys/directory_romfs.h" | ||||
|  | @ -29,7 +30,7 @@ Archive_RomFS::Archive_RomFS(const Loader::AppLoader& app_loader) { | |||
|  * @return Opened file, or nullptr | ||||
|  */ | ||||
| std::unique_ptr<FileBackend> Archive_RomFS::OpenFile(const Path& path, const Mode mode) const { | ||||
|     return std::make_unique<File_RomFS>(this); | ||||
|     return Common::make_unique<File_RomFS>(this); | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  | @ -78,7 +79,7 @@ bool Archive_RomFS::RenameDirectory(const FileSys::Path& src_path, const FileSys | |||
|  * @return Opened directory, or nullptr | ||||
|  */ | ||||
| std::unique_ptr<DirectoryBackend> Archive_RomFS::OpenDirectory(const Path& path) const { | ||||
|     return std::make_unique<Directory_RomFS>(); | ||||
|     return Common::make_unique<Directory_RomFS>(); | ||||
| } | ||||
| 
 | ||||
| } // namespace FileSys
 | ||||
|  |  | |||
|  | @ -7,6 +7,7 @@ | |||
| 
 | ||||
| #include "common/common_types.h" | ||||
| #include "common/file_util.h" | ||||
| #include "common/make_unique.h" | ||||
| #include "common/math_util.h" | ||||
| 
 | ||||
| #include "core/file_sys/archive_savedata.h" | ||||
|  | @ -260,7 +261,7 @@ ResultCode CloseArchive(ArchiveHandle handle) { | |||
| // TODO(yuriks): This might be what the fs:REG service is for. See the Register/Unregister calls in
 | ||||
| // http://3dbrew.org/wiki/Filesystem_services#ProgramRegistry_service_.22fs:REG.22
 | ||||
| ResultCode CreateArchive(std::unique_ptr<FileSys::ArchiveBackend>&& backend, ArchiveIdCode id_code) { | ||||
|     auto result = id_code_map.emplace(id_code, std::make_unique<Archive>(std::move(backend), id_code)); | ||||
|     auto result = id_code_map.emplace(id_code, Common::make_unique<Archive>(std::move(backend), id_code)); | ||||
| 
 | ||||
|     bool inserted = result.second; | ||||
|     _dbg_assert_msg_(Service_FS, inserted, "Tried to register more than one archive with same id code"); | ||||
|  | @ -281,7 +282,7 @@ ResultVal<Handle> OpenFileFromArchive(ArchiveHandle archive_handle, const FileSy | |||
|                           ErrorSummary::NotFound, ErrorLevel::Status); | ||||
|     } | ||||
| 
 | ||||
|     auto file = std::make_unique<File>(std::move(backend), path); | ||||
|     auto file = Common::make_unique<File>(std::move(backend), path); | ||||
|     Handle handle = Kernel::g_object_pool.Create(file.release()); | ||||
|     return MakeResult<Handle>(handle); | ||||
| } | ||||
|  | @ -378,7 +379,7 @@ ResultVal<Handle> OpenDirectoryFromArchive(ArchiveHandle archive_handle, const F | |||
|                           ErrorSummary::NotFound, ErrorLevel::Permanent); | ||||
|     } | ||||
| 
 | ||||
|     auto directory = std::make_unique<Directory>(std::move(backend), path); | ||||
|     auto directory = Common::make_unique<Directory>(std::move(backend), path); | ||||
|     Handle handle = Kernel::g_object_pool.Create(directory.release()); | ||||
|     return MakeResult<Handle>(handle); | ||||
| } | ||||
|  | @ -392,7 +393,7 @@ ResultCode FormatSaveData() { | |||
| 
 | ||||
|     // Create the SaveData archive
 | ||||
|     std::string savedata_directory = FileUtil::GetUserPath(D_SAVEDATA_IDX); | ||||
|     auto savedata_archive = std::make_unique<FileSys::Archive_SaveData>(savedata_directory, | ||||
|     auto savedata_archive = Common::make_unique<FileSys::Archive_SaveData>(savedata_directory, | ||||
|         Kernel::g_program_id); | ||||
| 
 | ||||
|     if (savedata_archive->Initialize()) { | ||||
|  | @ -414,14 +415,14 @@ void ArchiveInit() { | |||
|     // archive type is SDMC, so it is the only one getting exposed.
 | ||||
| 
 | ||||
|     std::string sdmc_directory = FileUtil::GetUserPath(D_SDMC_IDX); | ||||
|     auto sdmc_archive = std::make_unique<FileSys::Archive_SDMC>(sdmc_directory); | ||||
|     auto sdmc_archive = Common::make_unique<FileSys::Archive_SDMC>(sdmc_directory); | ||||
|     if (sdmc_archive->Initialize()) | ||||
|         CreateArchive(std::move(sdmc_archive), ArchiveIdCode::SDMC); | ||||
|     else | ||||
|         LOG_ERROR(Service_FS, "Can't instantiate SDMC archive with path %s", sdmc_directory.c_str()); | ||||
| 
 | ||||
|     std::string systemsavedata_directory = FileUtil::GetUserPath(D_SYSSAVEDATA_IDX); | ||||
|     auto systemsavedata_archive = std::make_unique<FileSys::Archive_SDMC>(systemsavedata_directory); | ||||
|     auto systemsavedata_archive = Common::make_unique<FileSys::Archive_SDMC>(systemsavedata_directory); | ||||
|     if (systemsavedata_archive->Initialize()) { | ||||
|         CreateArchive(std::move(systemsavedata_archive), ArchiveIdCode::SystemSaveData); | ||||
|     } else { | ||||
|  |  | |||
|  | @ -2,7 +2,9 @@ | |||
| // Licensed under GPLv2
 | ||||
| // Refer to the license.txt file included.
 | ||||
| 
 | ||||
| #include <memory> | ||||
| #include <string> | ||||
| 
 | ||||
| #include "common/make_unique.h" | ||||
| 
 | ||||
| #include "core/file_sys/archive_romfs.h" | ||||
| #include "core/loader/3dsx.h" | ||||
|  | @ -75,7 +77,7 @@ ResultStatus LoadFile(const std::string& filename) { | |||
|         // Load application and RomFS
 | ||||
|         if (ResultStatus::Success == app_loader.Load()) { | ||||
|             Kernel::g_program_id = app_loader.GetProgramId(); | ||||
|             Service::FS::CreateArchive(std::make_unique<FileSys::Archive_RomFS>(app_loader), Service::FS::ArchiveIdCode::RomFS); | ||||
|             Service::FS::CreateArchive(Common::make_unique<FileSys::Archive_RomFS>(app_loader), Service::FS::ArchiveIdCode::RomFS); | ||||
|             return ResultStatus::Success; | ||||
|         } | ||||
|         break; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue