[ox/fs] Make FileAddress methods and models constexpr and noexcept
This commit is contained in:
		
							
								
								
									
										16
									
								
								deps/ox/src/ox/fs/filesystem/filelocation.cpp
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										16
									
								
								deps/ox/src/ox/fs/filesystem/filelocation.cpp
									
									
									
									
										vendored
									
									
								
							@@ -10,43 +10,43 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
namespace ox {
 | 
					namespace ox {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
FileAddress::FileAddress() {
 | 
					FileAddress::FileAddress() noexcept {
 | 
				
			||||||
	m_data.inode = 0;
 | 
						m_data.inode = 0;
 | 
				
			||||||
	m_type = FileAddressType::Inode;
 | 
						m_type = FileAddressType::Inode;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
FileAddress::FileAddress(const FileAddress &other) {
 | 
					FileAddress::FileAddress(const FileAddress &other) noexcept {
 | 
				
			||||||
	operator=(other);
 | 
						operator=(other);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
FileAddress::FileAddress(std::nullptr_t) {
 | 
					FileAddress::FileAddress(std::nullptr_t) noexcept {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
FileAddress::FileAddress(uint64_t inode) {
 | 
					FileAddress::FileAddress(uint64_t inode) noexcept {
 | 
				
			||||||
	m_data.inode = inode;
 | 
						m_data.inode = inode;
 | 
				
			||||||
	m_type = FileAddressType::Inode;
 | 
						m_type = FileAddressType::Inode;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
FileAddress::FileAddress(char *path) {
 | 
					FileAddress::FileAddress(char *path) noexcept {
 | 
				
			||||||
	auto pathSize = ox_strlen(path) + 1;
 | 
						auto pathSize = ox_strlen(path) + 1;
 | 
				
			||||||
	m_data.path = new char[pathSize];
 | 
						m_data.path = new char[pathSize];
 | 
				
			||||||
	memcpy(m_data.path, path, pathSize);
 | 
						memcpy(m_data.path, path, pathSize);
 | 
				
			||||||
	m_type = FileAddressType::Path;
 | 
						m_type = FileAddressType::Path;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
FileAddress::FileAddress(const char *path) {
 | 
					FileAddress::FileAddress(const char *path) noexcept {
 | 
				
			||||||
	m_data.constPath = path;
 | 
						m_data.constPath = path;
 | 
				
			||||||
	m_type = FileAddressType::ConstPath;
 | 
						m_type = FileAddressType::ConstPath;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
FileAddress::~FileAddress() {
 | 
					FileAddress::~FileAddress() noexcept {
 | 
				
			||||||
	if (m_type == FileAddressType::Path) {
 | 
						if (m_type == FileAddressType::Path) {
 | 
				
			||||||
		delete[] m_data.path;
 | 
							delete[] m_data.path;
 | 
				
			||||||
		m_data.path = nullptr;
 | 
							m_data.path = nullptr;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const FileAddress &FileAddress::operator=(const FileAddress &other) {
 | 
					const FileAddress &FileAddress::operator=(const FileAddress &other) noexcept {
 | 
				
			||||||
	m_type = other.m_type;
 | 
						m_type = other.m_type;
 | 
				
			||||||
	switch (m_type) {
 | 
						switch (m_type) {
 | 
				
			||||||
		case FileAddressType::Path:
 | 
							case FileAddressType::Path:
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										28
									
								
								deps/ox/src/ox/fs/filesystem/filelocation.hpp
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										28
									
								
								deps/ox/src/ox/fs/filesystem/filelocation.hpp
									
									
									
									
										vendored
									
									
								
							@@ -23,7 +23,7 @@ enum class FileAddressType: int8_t {
 | 
				
			|||||||
class FileAddress {
 | 
					class FileAddress {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	template<typename T>
 | 
						template<typename T>
 | 
				
			||||||
	friend Error model(T*, FileAddress*);
 | 
						friend constexpr Error model(T*, FileAddress*) noexcept;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public:
 | 
						public:
 | 
				
			||||||
		static constexpr auto TypeName = "net.drinkingtea.ox.FileAddress";
 | 
							static constexpr auto TypeName = "net.drinkingtea.ox.FileAddress";
 | 
				
			||||||
@@ -42,21 +42,21 @@ class FileAddress {
 | 
				
			|||||||
		Data m_data;
 | 
							Data m_data;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public:
 | 
						public:
 | 
				
			||||||
		FileAddress();
 | 
							FileAddress() noexcept;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		FileAddress(const FileAddress &other);
 | 
							FileAddress(const FileAddress &other) noexcept;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		FileAddress(std::nullptr_t);
 | 
							FileAddress(std::nullptr_t) noexcept;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		FileAddress(uint64_t inode);
 | 
							FileAddress(uint64_t inode) noexcept;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		FileAddress(char *path);
 | 
							FileAddress(char *path) noexcept;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		FileAddress(const char *path);
 | 
							FileAddress(const char *path) noexcept;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		~FileAddress();
 | 
							~FileAddress() noexcept;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		const FileAddress &operator=(const FileAddress &other);
 | 
							const FileAddress &operator=(const FileAddress &other) noexcept;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		[[nodiscard]] constexpr FileAddressType type() const noexcept {
 | 
							[[nodiscard]] constexpr FileAddressType type() const noexcept {
 | 
				
			||||||
			switch (m_type) {
 | 
								switch (m_type) {
 | 
				
			||||||
@@ -68,7 +68,7 @@ class FileAddress {
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		Result<uint64_t> getInode() const noexcept {
 | 
							constexpr Result<uint64_t> getInode() const noexcept {
 | 
				
			||||||
			switch (m_type) {
 | 
								switch (m_type) {
 | 
				
			||||||
				case FileAddressType::Inode:
 | 
									case FileAddressType::Inode:
 | 
				
			||||||
					return m_data.inode;
 | 
										return m_data.inode;
 | 
				
			||||||
@@ -77,7 +77,7 @@ class FileAddress {
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		Result<const char*> getPath() const noexcept {
 | 
							constexpr Result<const char*> getPath() const noexcept {
 | 
				
			||||||
			switch (m_type) {
 | 
								switch (m_type) {
 | 
				
			||||||
				case FileAddressType::Path:
 | 
									case FileAddressType::Path:
 | 
				
			||||||
					return m_data.path;
 | 
										return m_data.path;
 | 
				
			||||||
@@ -88,14 +88,14 @@ class FileAddress {
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		operator bool() const {
 | 
							constexpr operator bool() const noexcept {
 | 
				
			||||||
			return m_type != FileAddressType::None;
 | 
								return m_type != FileAddressType::None;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
template<typename T>
 | 
					template<typename T>
 | 
				
			||||||
Error model(T *io, FileAddress::Data *obj) {
 | 
					constexpr Error model(T *io, FileAddress::Data *obj) noexcept {
 | 
				
			||||||
	io->template setTypeInfo<FileAddress::Data>();
 | 
						io->template setTypeInfo<FileAddress::Data>();
 | 
				
			||||||
	oxReturnError(io->field("path", SerStr(&obj->path)));
 | 
						oxReturnError(io->field("path", SerStr(&obj->path)));
 | 
				
			||||||
	oxReturnError(io->field("constPath", SerStr(&obj->path)));
 | 
						oxReturnError(io->field("constPath", SerStr(&obj->path)));
 | 
				
			||||||
@@ -104,7 +104,7 @@ Error model(T *io, FileAddress::Data *obj) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
template<typename T>
 | 
					template<typename T>
 | 
				
			||||||
Error model(T *io, FileAddress *fa) {
 | 
					constexpr Error model(T *io, FileAddress *fa) noexcept {
 | 
				
			||||||
	io->template setTypeInfo<FileAddress>();
 | 
						io->template setTypeInfo<FileAddress>();
 | 
				
			||||||
	oxReturnError(io->field("type", bit_cast<int8_t*>(&fa->m_type)));
 | 
						oxReturnError(io->field("type", bit_cast<int8_t*>(&fa->m_type)));
 | 
				
			||||||
	oxReturnError(io->field("data", UnionView(&fa->m_data, static_cast<int>(fa->m_type))));
 | 
						oxReturnError(io->field("data", UnionView(&fa->m_data, static_cast<int>(fa->m_type))));
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user