[olympic/keel] Finish east consting Keel
This commit is contained in:
		| @@ -11,18 +11,18 @@ namespace keel { | |||||||
|  |  | ||||||
| constexpr auto K1HdrSz = 40; | constexpr auto K1HdrSz = 40; | ||||||
|  |  | ||||||
| ox::Result<ox::UUID> readUuidHeader(const ox::Buffer &buff) noexcept; | ox::Result<ox::UUID> readUuidHeader(ox::Buffer const&buff) noexcept; | ||||||
|  |  | ||||||
| ox::Result<ox::UUID> readUuidHeader(const char *buff, std::size_t buffLen) noexcept; | ox::Result<ox::UUID> readUuidHeader(const char *buff, std::size_t buffLen) noexcept; | ||||||
|  |  | ||||||
| ox::Error writeUuidHeader(ox::Writer_c auto &writer, const ox::UUID &uuid) noexcept { | ox::Error writeUuidHeader(ox::Writer_c auto &writer, ox::UUID const&uuid) noexcept { | ||||||
| 	oxReturnError(write(writer, "K1;")); | 	oxReturnError(write(writer, "K1;")); | ||||||
| 	oxReturnError(uuid.toString(writer)); | 	oxReturnError(uuid.toString(writer)); | ||||||
| 	return writer.put(';'); | 	return writer.put(';'); | ||||||
| } | } | ||||||
|  |  | ||||||
| template<typename T> | template<typename T> | ||||||
| ox::Result<T> readAsset(const ox::Buffer &buff) noexcept { | ox::Result<T> readAsset(ox::Buffer const&buff) noexcept { | ||||||
| 	std::size_t offset = 0; | 	std::size_t offset = 0; | ||||||
| 	const auto err = readUuidHeader(buff).error; | 	const auto err = readUuidHeader(buff).error; | ||||||
| 	if (!err) { | 	if (!err) { | ||||||
| @@ -31,15 +31,15 @@ ox::Result<T> readAsset(const ox::Buffer &buff) noexcept { | |||||||
| 	return ox::readClaw<T>(buff.data() + offset, buff.size() - offset); | 	return ox::readClaw<T>(buff.data() + offset, buff.size() - offset); | ||||||
| } | } | ||||||
|  |  | ||||||
| ox::Result<ox::ModelObject> readAsset(ox::TypeStore &ts, const ox::Buffer &buff) noexcept; | ox::Result<ox::ModelObject> readAsset(ox::TypeStore &ts, ox::Buffer const&buff) noexcept; | ||||||
|  |  | ||||||
| struct AssetHdr { | struct AssetHdr { | ||||||
| 	ox::UUID uuid; | 	ox::UUID uuid; | ||||||
| 	ox::ClawHeader clawHdr; | 	ox::ClawHeader clawHdr; | ||||||
| }; | }; | ||||||
|  |  | ||||||
| ox::Result<AssetHdr> readAssetHeader(const char *buff, std::size_t buffLen) noexcept; | ox::Result<AssetHdr> readAssetHeader(char const*buff, std::size_t buffLen) noexcept; | ||||||
|  |  | ||||||
| ox::Result<AssetHdr> readAssetHeader(const ox::Buffer &buff) noexcept; | ox::Result<AssetHdr> readAssetHeader(ox::Buffer const&buff) noexcept; | ||||||
|  |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -47,7 +47,7 @@ class AssetContainer { | |||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		[[nodiscard]] | 		[[nodiscard]] | ||||||
| 		constexpr const T *get() const noexcept { | 		constexpr T const*get() const noexcept { | ||||||
| 			 return &m_obj; | 			 return &m_obj; | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| @@ -78,12 +78,12 @@ class AssetContainer { | |||||||
| template<typename T> | template<typename T> | ||||||
| class AssetRef: public ox::SignalHandler { | class AssetRef: public ox::SignalHandler { | ||||||
| 	private: | 	private: | ||||||
| 		const AssetContainer<T> *m_ctr = nullptr; | 		AssetContainer<T> const*m_ctr = nullptr; | ||||||
|  |  | ||||||
| 	public: | 	public: | ||||||
| 		ox::Signal<ox::Error()> updated; | 		ox::Signal<ox::Error()> updated; | ||||||
|  |  | ||||||
| 		explicit constexpr AssetRef(const AssetContainer<T> *c = nullptr) noexcept; | 		explicit constexpr AssetRef(AssetContainer<T> const*c = nullptr) noexcept; | ||||||
|  |  | ||||||
| 		constexpr AssetRef(AssetRef const&h) noexcept; | 		constexpr AssetRef(AssetRef const&h) noexcept; | ||||||
|  |  | ||||||
| @@ -96,18 +96,18 @@ class AssetRef: public ox::SignalHandler { | |||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		[[nodiscard]] | 		[[nodiscard]] | ||||||
| 		constexpr const T *get() const noexcept { | 		constexpr T const*get() const noexcept { | ||||||
| 			if (m_ctr) { | 			if (m_ctr) { | ||||||
| 				return m_ctr->get(); | 				return m_ctr->get(); | ||||||
| 			} | 			} | ||||||
| 			return nullptr; | 			return nullptr; | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		constexpr const T &operator*() const noexcept { | 		constexpr T const&operator*() const noexcept { | ||||||
| 			return *m_ctr->get(); | 			return *m_ctr->get(); | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		constexpr const T *operator->() const noexcept { | 		constexpr T const*operator->() const noexcept { | ||||||
| 			return m_ctr->get(); | 			return m_ctr->get(); | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| @@ -153,7 +153,7 @@ class AssetRef: public ox::SignalHandler { | |||||||
| }; | }; | ||||||
|  |  | ||||||
| template<typename T> | template<typename T> | ||||||
| constexpr AssetRef<T>::AssetRef(const AssetContainer<T> *c) noexcept: m_ctr(c) { | constexpr AssetRef<T>::AssetRef(AssetContainer<T> const*c) noexcept: m_ctr(c) { | ||||||
| 	if (c) { | 	if (c) { | ||||||
| 		c->updated.connect(this, &AssetRef::emitUpdated); | 		c->updated.connect(this, &AssetRef::emitUpdated); | ||||||
| 	} | 	} | ||||||
| @@ -219,7 +219,7 @@ class AssetManager { | |||||||
| 				} | 				} | ||||||
|  |  | ||||||
| 				void gc() noexcept final { | 				void gc() noexcept final { | ||||||
| 					for (const auto &ack : m_cache.keys()) { | 					for (auto const&ack : m_cache.keys()) { | ||||||
| 						auto &ac = m_cache[ack]; | 						auto &ac = m_cache[ack]; | ||||||
| 						if (!ac->references()) { | 						if (!ac->references()) { | ||||||
| 							m_cache.erase(ack); | 							m_cache.erase(ack); | ||||||
| @@ -249,7 +249,7 @@ class AssetManager { | |||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		template<typename T> | 		template<typename T> | ||||||
| 		ox::Result<AssetRef<T>> setAsset(ox::CRStringView assetId, const T &obj) noexcept { | 		ox::Result<AssetRef<T>> setAsset(ox::CRStringView assetId, T const&obj) noexcept { | ||||||
| 			auto m = getTypeManager<T>(); | 			auto m = getTypeManager<T>(); | ||||||
| 			return m->setAsset(assetId, obj); | 			return m->setAsset(assetId, obj); | ||||||
| 		} | 		} | ||||||
| @@ -265,27 +265,27 @@ class AssetManager { | |||||||
| template<typename T> | template<typename T> | ||||||
| class AssetRef { | class AssetRef { | ||||||
| 	private: | 	private: | ||||||
| 		const T *const m_obj = nullptr; | 		T const*const m_obj = nullptr; | ||||||
|  |  | ||||||
| 	public: | 	public: | ||||||
| 		constexpr AssetRef() noexcept = default; | 		constexpr AssetRef() noexcept = default; | ||||||
|  |  | ||||||
| 		explicit constexpr AssetRef(const T *obj) noexcept: m_obj(obj) { | 		explicit constexpr AssetRef(T const*obj) noexcept: m_obj(obj) { | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		constexpr const T *get() const noexcept { | 		constexpr T const*get() const noexcept { | ||||||
| 			return m_obj; | 			return m_obj; | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		constexpr const T &operator*() const & noexcept { | 		constexpr T const&operator*() const & noexcept { | ||||||
| 			return *m_obj; | 			return *m_obj; | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		constexpr const T &&operator*() const && noexcept { | 		constexpr T const&&operator*() const && noexcept { | ||||||
| 			return *m_obj; | 			return *m_obj; | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		constexpr const T *operator->() const noexcept { | 		constexpr T const*operator->() const noexcept { | ||||||
| 			return m_obj; | 			return m_obj; | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
|   | |||||||
| @@ -22,7 +22,7 @@ class Context { | |||||||
| 		AssetManager assetManager; | 		AssetManager assetManager; | ||||||
| 		ox::HashMap<ox::String, ox::UUID> pathToUuid; | 		ox::HashMap<ox::String, ox::UUID> pathToUuid; | ||||||
| 		ox::HashMap<ox::UUIDStr, ox::String> uuidToPath; | 		ox::HashMap<ox::UUIDStr, ox::String> uuidToPath; | ||||||
| 		ox::Vector<const class BaseConverter*> converters; | 		ox::Vector<class BaseConverter const*> converters; | ||||||
| 		ox::Vector<PackTransform> packTransforms; | 		ox::Vector<PackTransform> packTransforms; | ||||||
| #else | #else | ||||||
| 		std::size_t preloadSectionOffset = 0; | 		std::size_t preloadSectionOffset = 0; | ||||||
|   | |||||||
| @@ -81,7 +81,7 @@ ox::Result<keel::AssetRef<T>> readObjNoCache( | |||||||
| 		ox::CRStringView assetId) noexcept { | 		ox::CRStringView assetId) noexcept { | ||||||
| 	if constexpr(ox::preloadable<T>::value) { | 	if constexpr(ox::preloadable<T>::value) { | ||||||
| 		oxRequire(addr, getPreloadAddr(ctx, assetId)); | 		oxRequire(addr, getPreloadAddr(ctx, assetId)); | ||||||
| 		return keel::AssetRef<T>(std::bit_cast<const T*>(uintptr_t{addr})); | 		return keel::AssetRef<T>(std::bit_cast<T const*>(uintptr_t{addr})); | ||||||
| 	} else { | 	} else { | ||||||
| 		return OxError(1); | 		return OxError(1); | ||||||
| 	} | 	} | ||||||
| @@ -107,7 +107,7 @@ ox::Result<AssetRef<T>> setAsset(keel::Context &ctx, ox::StringView assetId, T c | |||||||
| 	} | 	} | ||||||
| 	ox::UUIDStr idStr; | 	ox::UUIDStr idStr; | ||||||
| 	if (assetId[0] == '/') { | 	if (assetId[0] == '/') { | ||||||
| 		const auto [id, err] = ctx.pathToUuid.at(assetId); | 		auto const [id, err] = ctx.pathToUuid.at(assetId); | ||||||
| 		oxReturnError(err); | 		oxReturnError(err); | ||||||
| 		idStr = id->toString(); | 		idStr = id->toString(); | ||||||
| 		assetId = idStr; | 		assetId = idStr; | ||||||
| @@ -141,7 +141,7 @@ ox::Result<keel::AssetRef<T>> readObj( | |||||||
| #else | #else | ||||||
| 	if constexpr(ox::preloadable<T>::value) { | 	if constexpr(ox::preloadable<T>::value) { | ||||||
| 		oxRequire(addr, getPreloadAddr(ctx, file)); | 		oxRequire(addr, getPreloadAddr(ctx, file)); | ||||||
| 		return keel::AssetRef<T>(std::bit_cast<const T*>(uintptr_t{addr})); | 		return keel::AssetRef<T>(std::bit_cast<T const*>(uintptr_t{addr})); | ||||||
| 	} else { | 	} else { | ||||||
| 		return OxError(1); | 		return OxError(1); | ||||||
| 	} | 	} | ||||||
|   | |||||||
| @@ -37,9 +37,9 @@ class Module { | |||||||
| 		virtual ox::Vector<PackTransform> packTransforms() const noexcept; | 		virtual ox::Vector<PackTransform> packTransforms() const noexcept; | ||||||
| }; | }; | ||||||
|  |  | ||||||
| void registerModule(const Module *mod) noexcept; | void registerModule(Module const*mod) noexcept; | ||||||
|  |  | ||||||
| [[nodiscard]] | [[nodiscard]] | ||||||
| ox::Vector<const keel::Module*> const&modules() noexcept; | ox::Vector<keel::Module const*> const&modules() noexcept; | ||||||
|  |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -66,7 +66,7 @@ struct GbaPlatSpec { | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	[[nodiscard]] | 	[[nodiscard]] | ||||||
| 	static constexpr std::size_t alignOf(const auto*) noexcept { | 	static constexpr std::size_t alignOf(auto const*) noexcept { | ||||||
| 		return 4; | 		return 4; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| @@ -94,10 +94,10 @@ ox::Error preloadObj( | |||||||
| 		oxOutf("preloading {}\n", path); | 		oxOutf("preloading {}\n", path); | ||||||
| 		// preload | 		// preload | ||||||
| 		oxRequire(a, pl.startAlloc(ox::sizeOf<GbaPlatSpec>(&obj))); | 		oxRequire(a, pl.startAlloc(ox::sizeOf<GbaPlatSpec>(&obj))); | ||||||
| 		const auto err = ox::preload<GbaPlatSpec, decltype(obj)>(&pl, &obj); | 		auto const err = ox::preload<GbaPlatSpec, decltype(obj)>(&pl, &obj); | ||||||
| 		oxReturnError(pl.endAlloc()); | 		oxReturnError(pl.endAlloc()); | ||||||
| 		oxReturnError(err); | 		oxReturnError(err); | ||||||
| 		const keel::PreloadPtr p{.preloadAddr = static_cast<uint32_t>(a)}; | 		keel::PreloadPtr const p{.preloadAddr = static_cast<uint32_t>(a)}; | ||||||
| 		oxReturnError(ox::writeMC(p).moveTo(buff)); | 		oxReturnError(ox::writeMC(p).moveTo(buff)); | ||||||
| 	} else { | 	} else { | ||||||
| 		// strip the Claw header (it is not needed after preloading) and write back out to dest fs | 		// strip the Claw header (it is not needed after preloading) and write back out to dest fs | ||||||
| @@ -118,11 +118,11 @@ ox::Error preloadDir( | |||||||
| 	// copy | 	// copy | ||||||
| 	oxTracef("pack.preload", "path: {}", path); | 	oxTracef("pack.preload", "path: {}", path); | ||||||
| 	oxRequire(fileList, romFs.ls(path)); | 	oxRequire(fileList, romFs.ls(path)); | ||||||
| 	for (const auto &name : fileList) { | 	for (auto const&name : fileList) { | ||||||
| 		const auto filePath = ox::sfmt("{}{}", path, name); | 		auto const filePath = ox::sfmt("{}{}", path, name); | ||||||
| 		oxRequire(stat, romFs.stat(filePath)); | 		oxRequire(stat, romFs.stat(filePath)); | ||||||
| 		if (stat.fileType == ox::FileType::Directory) { | 		if (stat.fileType == ox::FileType::Directory) { | ||||||
| 			const auto dir = ox::sfmt("{}{}/", path, name); | 			auto const dir = ox::sfmt("{}{}/", path, name); | ||||||
| 			oxReturnError(preloadDir(ts, romFs, pl, dir)); | 			oxReturnError(preloadDir(ts, romFs, pl, dir)); | ||||||
| 		} else { | 		} else { | ||||||
| 			oxReturnError(preloadObj(ts, romFs, pl, filePath)); | 			oxReturnError(preloadObj(ts, romFs, pl, filePath)); | ||||||
| @@ -150,7 +150,7 @@ ox::Error appendBinary(ox::Buffer &binBuff, ox::SpanView<char> const&fsBuff, ox: | |||||||
| 	oxReturnError(padbin(w, hdrSize)); | 	oxReturnError(padbin(w, hdrSize)); | ||||||
| 	oxReturnError(w.write(preloadHdr.data(), preloadHdr.bytes())); | 	oxReturnError(w.write(preloadHdr.data(), preloadHdr.bytes())); | ||||||
| 	oxReturnError(pl.offsetPtrs(binBuff.size())); | 	oxReturnError(pl.offsetPtrs(binBuff.size())); | ||||||
| 	const auto &plBuff = pl.buff(); | 	auto const&plBuff = pl.buff(); | ||||||
| 	oxReturnError(w.write(plBuff.data(), plBuff.size())); | 	oxReturnError(w.write(plBuff.data(), plBuff.size())); | ||||||
| 	return {}; | 	return {}; | ||||||
| } | } | ||||||
|   | |||||||
| @@ -20,28 +20,6 @@ class Wrap { | |||||||
| 		virtual ~Wrap() = default; | 		virtual ~Wrap() = default; | ||||||
| }; | }; | ||||||
|  |  | ||||||
| template<typename T> |  | ||||||
| class WrapIndirect: public Wrap { |  | ||||||
| 	private: |  | ||||||
| 		T *m_obj = nullptr; |  | ||||||
|  |  | ||||||
| 	public: |  | ||||||
| 		template<typename... Args> |  | ||||||
| 		constexpr explicit WrapIndirect(Args &&...args): m_obj(ox::forward<Args>(args)...) { |  | ||||||
| 		} |  | ||||||
|  |  | ||||||
| 		[[nodiscard]] |  | ||||||
| 		constexpr auto obj() const noexcept { |  | ||||||
| 			return &m_obj; |  | ||||||
| 		} |  | ||||||
|  |  | ||||||
| 		[[nodiscard]] |  | ||||||
| 		constexpr auto obj() noexcept { |  | ||||||
| 			return &m_obj; |  | ||||||
| 		} |  | ||||||
|  |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template<typename T> | template<typename T> | ||||||
| class WrapInline: public Wrap { | class WrapInline: public Wrap { | ||||||
| 	private: | 	private: | ||||||
| @@ -55,8 +33,8 @@ class WrapInline: public Wrap { | |||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		[[nodiscard]] | 		[[nodiscard]] | ||||||
| 		constexpr auto obj() noexcept { | 		constexpr T &obj() noexcept { | ||||||
| 			return &m_obj; | 			return m_obj; | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| }; | }; | ||||||
| @@ -67,7 +45,7 @@ constexpr auto makeWrap(Args &&...args) noexcept { | |||||||
| } | } | ||||||
|  |  | ||||||
| template<typename T> | template<typename T> | ||||||
| constexpr T *wrapCast(Wrap &ptr) noexcept { | constexpr T &wrapCast(Wrap &ptr) noexcept { | ||||||
| 	return static_cast<WrapInline<T>&>(ptr).obj(); | 	return static_cast<WrapInline<T>&>(ptr).obj(); | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -89,7 +67,7 @@ class BaseConverter { | |||||||
|  |  | ||||||
| 		virtual ox::Result<ox::UniquePtr<Wrap>> convertPtrToPtr(keel::Context &ctx, Wrap &src) const noexcept = 0; | 		virtual ox::Result<ox::UniquePtr<Wrap>> convertPtrToPtr(keel::Context &ctx, Wrap &src) const noexcept = 0; | ||||||
|  |  | ||||||
| 		virtual ox::Result<ox::UniquePtr<Wrap>> convertBuffToPtr(keel::Context &ctx, const ox::Buffer &srcBuff) const noexcept = 0; | 		virtual ox::Result<ox::UniquePtr<Wrap>> convertBuffToPtr(keel::Context &ctx, ox::Buffer const&srcBuff) const noexcept = 0; | ||||||
|  |  | ||||||
| 		[[nodiscard]] | 		[[nodiscard]] | ||||||
| 		inline bool matches( | 		inline bool matches( | ||||||
| @@ -132,14 +110,14 @@ class Converter: public BaseConverter { | |||||||
|  |  | ||||||
| 		ox::Result<ox::UniquePtr<Wrap>> convertPtrToPtr(keel::Context &ctx, Wrap &src) const noexcept final { | 		ox::Result<ox::UniquePtr<Wrap>> convertPtrToPtr(keel::Context &ctx, Wrap &src) const noexcept final { | ||||||
| 			auto dst = makeWrap<DstType>(); | 			auto dst = makeWrap<DstType>(); | ||||||
| 			oxReturnError(convert(ctx, *wrapCast<SrcType>(src), *wrapCast<DstType>(*dst))); | 			oxReturnError(convert(ctx, wrapCast<SrcType>(src), wrapCast<DstType>(*dst))); | ||||||
| 			return ox::Result<ox::UniquePtr<Wrap>>(std::move(dst)); | 			return ox::Result<ox::UniquePtr<Wrap>>(std::move(dst)); | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		ox::Result<ox::UniquePtr<Wrap>> convertBuffToPtr(keel::Context &ctx, ox::Buffer const&srcBuff) const noexcept final { | 		ox::Result<ox::UniquePtr<Wrap>> convertBuffToPtr(keel::Context &ctx, ox::Buffer const&srcBuff) const noexcept final { | ||||||
| 			oxRequireM(src, readAsset<SrcType>(srcBuff)); | 			oxRequireM(src, readAsset<SrcType>(srcBuff)); | ||||||
| 			auto dst = makeWrap<DstType>(); | 			auto dst = makeWrap<DstType>(); | ||||||
| 			oxReturnError(convert(ctx, src, *wrapCast<DstType>(*dst))); | 			oxReturnError(convert(ctx, src, wrapCast<DstType>(*dst))); | ||||||
| 			return ox::Result<ox::UniquePtr<Wrap>>(std::move(dst)); | 			return ox::Result<ox::UniquePtr<Wrap>>(std::move(dst)); | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| @@ -149,24 +127,24 @@ class Converter: public BaseConverter { | |||||||
| }; | }; | ||||||
|  |  | ||||||
| ox::Result<ox::UniquePtr<Wrap>> convert( | ox::Result<ox::UniquePtr<Wrap>> convert( | ||||||
| 		keel::Context &ctx, const ox::Buffer &srcBuffer, | 		keel::Context &ctx, ox::Buffer const&srcBuffer, | ||||||
| 		ox::CRStringView dstTypeName, int dstTypeVersion) noexcept; | 		ox::CRStringView dstTypeName, int dstTypeVersion) noexcept; | ||||||
|  |  | ||||||
| template<typename DstType> | template<typename DstType> | ||||||
| ox::Result<DstType> convert(keel::Context &ctx, const ox::Buffer &srcBuffer) noexcept { | ox::Result<DstType> convert(keel::Context &ctx, ox::Buffer const&srcBuffer) noexcept { | ||||||
| 	static constexpr auto DstTypeName = ox::requireModelTypeName<DstType>(); | 	static constexpr auto DstTypeName = ox::requireModelTypeName<DstType>(); | ||||||
| 	static constexpr auto DstTypeVersion = ox::requireModelTypeVersion<DstType>(); | 	static constexpr auto DstTypeVersion = ox::requireModelTypeVersion<DstType>(); | ||||||
| 	oxRequire(out, convert(ctx, srcBuffer, DstTypeName, DstTypeVersion)); | 	oxRequire(out, convert(ctx, srcBuffer, DstTypeName, DstTypeVersion)); | ||||||
| 	return wrapCast<DstType>(out); | 	return std::move(wrapCast<DstType>(out)); | ||||||
| } | } | ||||||
|  |  | ||||||
| template<typename DstType> | template<typename DstType> | ||||||
| ox::Error convert(keel::Context &ctx, const ox::Buffer &buff, DstType *outObj) noexcept { | ox::Error convert(keel::Context &ctx, ox::Buffer const&buff, DstType *outObj) noexcept { | ||||||
| 	static constexpr auto DstTypeName = ox::requireModelTypeName<DstType>(); | 	static constexpr auto DstTypeName = ox::requireModelTypeName<DstType>(); | ||||||
| 	static constexpr auto DstTypeVersion = ox::requireModelTypeVersion<DstType>(); | 	static constexpr auto DstTypeVersion = ox::requireModelTypeVersion<DstType>(); | ||||||
| 	oxRequire(outPtr, convert(ctx, buff, DstTypeName, DstTypeVersion)); | 	oxRequire(outPtr, convert(ctx, buff, DstTypeName, DstTypeVersion)); | ||||||
| 	*outObj = std::move(*wrapCast<DstType>(*outPtr)); | 	*outObj = std::move(wrapCast<DstType>(*outPtr)); | ||||||
| 	return OxError(0); | 	return {}; | ||||||
| } | } | ||||||
|  |  | ||||||
| template<typename DstType> | template<typename DstType> | ||||||
| @@ -174,7 +152,7 @@ ox::Result<ox::Buffer> convertBuffToBuff(keel::Context &ctx, const ox::Buffer &s | |||||||
| 	static constexpr auto DstTypeName = ox::requireModelTypeName<DstType>(); | 	static constexpr auto DstTypeName = ox::requireModelTypeName<DstType>(); | ||||||
| 	static constexpr auto DstTypeVersion = ox::requireModelTypeVersion<DstType>(); | 	static constexpr auto DstTypeVersion = ox::requireModelTypeVersion<DstType>(); | ||||||
| 	oxRequire(out, convert(ctx, srcBuffer, DstTypeName, DstTypeVersion)); | 	oxRequire(out, convert(ctx, srcBuffer, DstTypeName, DstTypeVersion)); | ||||||
| 	return ox::writeClaw<DstType>(*wrapCast<DstType>(*out), fmt); | 	return ox::writeClaw<DstType>(wrapCast<DstType>(*out), fmt); | ||||||
| } | } | ||||||
|  |  | ||||||
| template<typename From, typename To, ox::ClawFormat fmt = ox::ClawFormat::Metal> | template<typename From, typename To, ox::ClawFormat fmt = ox::ClawFormat::Metal> | ||||||
|   | |||||||
| @@ -19,7 +19,7 @@ class TypeStore: public ox::TypeStore { | |||||||
| 		explicit TypeStore(ox::FileSystem &fs, ox::StringView descPath) noexcept; | 		explicit TypeStore(ox::FileSystem &fs, ox::StringView descPath) noexcept; | ||||||
|  |  | ||||||
| 	protected: | 	protected: | ||||||
| 		ox::Result<ox::UniquePtr<ox::DescriptorType>> loadDescriptor(ox::CRStringView typeId) noexcept override; | 		ox::Result<ox::UPtr<ox::DescriptorType>> loadDescriptor(ox::CRStringView typeId) noexcept override; | ||||||
| }; | }; | ||||||
|  |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -10,7 +10,7 @@ ox::Result<ox::UUID> readUuidHeader(ox::Buffer const&buff) noexcept { | |||||||
| 	return readUuidHeader(buff.data(), buff.size()); | 	return readUuidHeader(buff.data(), buff.size()); | ||||||
| } | } | ||||||
|  |  | ||||||
| ox::Result<ox::UUID> readUuidHeader(const char *buff, std::size_t buffLen) noexcept { | ox::Result<ox::UUID> readUuidHeader(char const*buff, std::size_t buffLen) noexcept { | ||||||
| 	if (buffLen < K1HdrSz) { | 	if (buffLen < K1HdrSz) { | ||||||
| 		return OxError(1, "Insufficient data to contain complete Keel header"); | 		return OxError(1, "Insufficient data to contain complete Keel header"); | ||||||
| 	} | 	} | ||||||
| @@ -29,7 +29,7 @@ ox::Result<ox::ModelObject> readAsset(ox::TypeStore &ts, ox::Buffer const&buff) | |||||||
| 	return ox::readClaw(ts, buff.data() + offset, buff.size() - offset); | 	return ox::readClaw(ts, buff.data() + offset, buff.size() - offset); | ||||||
| } | } | ||||||
|  |  | ||||||
| ox::Result<AssetHdr> readAssetHeader(const char *buff, std::size_t buffLen) noexcept { | ox::Result<AssetHdr> readAssetHeader(char const*buff, std::size_t buffLen) noexcept { | ||||||
| 	AssetHdr out; | 	AssetHdr out; | ||||||
| 	const auto err = readUuidHeader(buff, buffLen).moveTo(out.uuid); | 	const auto err = readUuidHeader(buff, buffLen).moveTo(out.uuid); | ||||||
| 	const auto offset = err ? 0u : K1HdrSz; | 	const auto offset = err ? 0u : K1HdrSz; | ||||||
|   | |||||||
| @@ -13,7 +13,7 @@ ox::Error init( | |||||||
| 	ctx.appName = appName; | 	ctx.appName = appName; | ||||||
| 	oxIgnoreError(setRomFs(ctx, std::move(fs))); | 	oxIgnoreError(setRomFs(ctx, std::move(fs))); | ||||||
| #ifndef OX_BARE_METAL | #ifndef OX_BARE_METAL | ||||||
| 	const auto &mods = modules(); | 	auto const&mods = modules(); | ||||||
| 	for (auto &mod : mods) { | 	for (auto &mod : mods) { | ||||||
| 		// register type converters | 		// register type converters | ||||||
| 		for (auto c : mod->converters()) { | 		for (auto c : mod->converters()) { | ||||||
|   | |||||||
| @@ -19,7 +19,7 @@ ox::Result<char*> loadRom(ox::CRStringView path) noexcept { | |||||||
| 		return OxError(1, "Could not find ROM file"); | 		return OxError(1, "Could not find ROM file"); | ||||||
| 	} | 	} | ||||||
| 	try { | 	try { | ||||||
| 		const auto size = file.tellg(); | 		auto const size = file.tellg(); | ||||||
| 		file.seekg(0, std::ios::beg); | 		file.seekg(0, std::ios::beg); | ||||||
| 		auto buff = new char[static_cast<std::size_t>(size)]; | 		auto buff = new char[static_cast<std::size_t>(size)]; | ||||||
| 		file.read(buff, size); | 		file.read(buff, size); | ||||||
| @@ -49,12 +49,12 @@ void createUuidMapping(Context &ctx, ox::StringView filePath, ox::UUID const&uui | |||||||
|  |  | ||||||
| static ox::Error buildUuidMap(Context &ctx, ox::CRStringView path) noexcept { | static ox::Error buildUuidMap(Context &ctx, ox::CRStringView path) noexcept { | ||||||
| 	oxRequire(files, ctx.rom->ls(path)); | 	oxRequire(files, ctx.rom->ls(path)); | ||||||
| 	for (const auto &f : files) { | 	for (auto const&f : files) { | ||||||
| 		oxRequireM(filePath, ox::join("/", ox::Array<ox::StringView, 2>{path, f})); | 		oxRequireM(filePath, ox::join("/", ox::Array<ox::StringView, 2>{path, f})); | ||||||
| 		oxRequire(stat, ctx.rom->stat(filePath)); | 		oxRequire(stat, ctx.rom->stat(filePath)); | ||||||
| 		if (stat.fileType == ox::FileType::NormalFile) { | 		if (stat.fileType == ox::FileType::NormalFile) { | ||||||
| 			oxRequire(data, ctx.rom->read(filePath)); | 			oxRequire(data, ctx.rom->read(filePath)); | ||||||
| 			const auto [hdr, err] = readAssetHeader(data); | 			auto const [hdr, err] = readAssetHeader(data); | ||||||
| 			if (!err) { | 			if (!err) { | ||||||
| 				createUuidMapping(ctx, filePath, hdr.uuid); | 				createUuidMapping(ctx, filePath, hdr.uuid); | ||||||
| 			} | 			} | ||||||
| @@ -157,7 +157,7 @@ ox::Result<std::size_t> getPreloadAddr(keel::Context &ctx, ox::CRStringView path | |||||||
| 	return static_cast<std::size_t>(p.preloadAddr) + ctx.preloadSectionOffset; | 	return static_cast<std::size_t>(p.preloadAddr) + ctx.preloadSectionOffset; | ||||||
| } | } | ||||||
|  |  | ||||||
| ox::Result<std::size_t> getPreloadAddr(keel::Context &ctx, const ox::FileAddress &file) noexcept { | ox::Result<std::size_t> getPreloadAddr(keel::Context &ctx, ox::FileAddress const&file) noexcept { | ||||||
| 	oxRequire(stat, ctx.rom->stat(file)); | 	oxRequire(stat, ctx.rom->stat(file)); | ||||||
| 	oxRequire(buff, static_cast<ox::MemFS*>(ctx.rom.get())->directAccess(file)); | 	oxRequire(buff, static_cast<ox::MemFS*>(ctx.rom.get())->directAccess(file)); | ||||||
| 	PreloadPtr p; | 	PreloadPtr p; | ||||||
|   | |||||||
| @@ -6,14 +6,14 @@ | |||||||
|  |  | ||||||
| namespace keel { | namespace keel { | ||||||
|  |  | ||||||
| static ox::Vector<const Module*> mods; | static ox::Vector<Module const*> mods; | ||||||
|  |  | ||||||
| void registerModule(const Module *mod) noexcept { | void registerModule(Module const*mod) noexcept { | ||||||
| 	mods.emplace_back(mod); | 	mods.emplace_back(mod); | ||||||
| } | } | ||||||
|  |  | ||||||
| [[nodiscard]] | [[nodiscard]] | ||||||
| ox::Vector<const Module*> const&modules() noexcept { | ox::Vector<Module const*> const&modules() noexcept { | ||||||
| 	return mods; | 	return mods; | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -22,7 +22,7 @@ ox::Vector<TypeDescGenerator> Module::types() const noexcept { | |||||||
| 	return {}; | 	return {}; | ||||||
| } | } | ||||||
|  |  | ||||||
| ox::Vector<const keel::BaseConverter*> Module::converters() const noexcept { | ox::Vector<keel::BaseConverter const*> Module::converters() const noexcept { | ||||||
| 	return {}; | 	return {}; | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -28,7 +28,7 @@ static ox::Result<ox::Buffer> readFileBuff(ox::StringView path) noexcept { | |||||||
| 		return OxError(1, "Could not find OxFS file"); | 		return OxError(1, "Could not find OxFS file"); | ||||||
| 	} | 	} | ||||||
| 	try { | 	try { | ||||||
| 		const auto size = static_cast<std::size_t>(file.tellg()); | 		auto const size = static_cast<std::size_t>(file.tellg()); | ||||||
| 		ox::Buffer buff(size); | 		ox::Buffer buff(size); | ||||||
| 		file.seekg(0, std::ios::beg); | 		file.seekg(0, std::ios::beg); | ||||||
| 		file.read(buff.data(), static_cast<std::streamsize>(buff.size())); | 		file.read(buff.data(), static_cast<std::streamsize>(buff.size())); | ||||||
| @@ -40,7 +40,7 @@ static ox::Result<ox::Buffer> readFileBuff(ox::StringView path) noexcept { | |||||||
| } | } | ||||||
|  |  | ||||||
| static ox::Error generateTypes(ox::TypeStore *ts) noexcept { | static ox::Error generateTypes(ox::TypeStore *ts) noexcept { | ||||||
| 	for (const auto mod : keel::modules()) { | 	for (auto const mod : keel::modules()) { | ||||||
| 		for (auto gen : mod->types()) { | 		for (auto gen : mod->types()) { | ||||||
| 			oxReturnError(gen(*ts)); | 			oxReturnError(gen(*ts)); | ||||||
| 		} | 		} | ||||||
| @@ -74,10 +74,10 @@ static ox::Error pack(ox::StringView argSrc, ox::StringView argRomBin, ox::Strin | |||||||
| 	return {}; | 	return {}; | ||||||
| } | } | ||||||
|  |  | ||||||
| static ox::Error run(int argc, const char **argv, ox::StringView projectDataDir) noexcept { | static ox::Error run(int argc, char const**argv, ox::StringView projectDataDir) noexcept { | ||||||
| 	ox::ClArgs const args(argc, argv); | 	ox::ClArgs const args(argc, argv); | ||||||
| 	const auto argSrc = args.getString("src", ""); | 	auto const argSrc = args.getString("src", ""); | ||||||
| 	const auto argRomBin = args.getString("rom-bin", ""); | 	auto const argRomBin = args.getString("rom-bin", ""); | ||||||
| 	if (argSrc == "") { | 	if (argSrc == "") { | ||||||
| 		oxErr("\033[31;1;1merror:\033[0m must specify a source directory\n"); | 		oxErr("\033[31;1;1merror:\033[0m must specify a source directory\n"); | ||||||
| 		return OxError(1, "must specify a source directory"); | 		return OxError(1, "must specify a source directory"); | ||||||
| @@ -96,7 +96,7 @@ ox::Error run( | |||||||
| 		[[maybe_unused]] ox::StringView appName, | 		[[maybe_unused]] ox::StringView appName, | ||||||
| 		ox::StringView projectDataDir, | 		ox::StringView projectDataDir, | ||||||
| 		int argc, | 		int argc, | ||||||
| 		const char **argv) noexcept { | 		char const**argv) noexcept { | ||||||
| 	return ::run(argc, argv, projectDataDir); | 	return ::run(argc, argv, projectDataDir); | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -29,7 +29,7 @@ static ox::Error pathToInode( | |||||||
| 			return {}; | 			return {}; | ||||||
| 	} | 	} | ||||||
| 	if (beginsWith(path, "uuid://")) { | 	if (beginsWith(path, "uuid://")) { | ||||||
| 		const auto uuid = substr<ox::StringView>(path, 7); | 		auto const uuid = substr<ox::StringView>(path, 7); | ||||||
| 		oxReturnError(keel::uuidToPath(ctx, uuid).moveTo(path)); | 		oxReturnError(keel::uuidToPath(ctx, uuid).moveTo(path)); | ||||||
| 	} | 	} | ||||||
| 	oxRequire(s, dest.stat(path)); | 	oxRequire(s, dest.stat(path)); | ||||||
| @@ -113,11 +113,11 @@ static ox::Error transformClaw( | |||||||
| 	// copy | 	// copy | ||||||
| 	oxTracef("pack.transformClaw", "path: {}", path); | 	oxTracef("pack.transformClaw", "path: {}", path); | ||||||
| 	oxRequire(fileList, dest.ls(path)); | 	oxRequire(fileList, dest.ls(path)); | ||||||
| 	for (const auto &name : fileList) { | 	for (auto const&name : fileList) { | ||||||
| 		const auto filePath = ox::sfmt("{}{}", path, name); | 		auto const filePath = ox::sfmt("{}{}", path, name); | ||||||
| 		oxRequire(stat, dest.stat(filePath)); | 		oxRequire(stat, dest.stat(filePath)); | ||||||
| 		if (stat.fileType == ox::FileType::Directory) { | 		if (stat.fileType == ox::FileType::Directory) { | ||||||
| 			const auto dir = ox::sfmt("{}{}/", path, name); | 			auto const dir = ox::sfmt("{}{}/", path, name); | ||||||
| 			oxReturnError(transformClaw(ctx, ts, dest, dir)); | 			oxReturnError(transformClaw(ctx, ts, dest, dir)); | ||||||
| 		} else { | 		} else { | ||||||
| 			oxReturnError(doTransformations(ctx, ts, dest, filePath)); | 			oxReturnError(doTransformations(ctx, ts, dest, filePath)); | ||||||
| @@ -133,7 +133,7 @@ static ox::Error copy( | |||||||
| 	oxOutf("copying directory: {}\n", path); | 	oxOutf("copying directory: {}\n", path); | ||||||
| 	// copy | 	// copy | ||||||
| 	oxRequire(fileList, src.ls(path)); | 	oxRequire(fileList, src.ls(path)); | ||||||
| 	for (const auto &name : fileList) { | 	for (auto const&name : fileList) { | ||||||
| 		auto currentFile = ox::sfmt("{}{}", path, name); | 		auto currentFile = ox::sfmt("{}{}", path, name); | ||||||
| 		if (beginsWith(name, ".")) { | 		if (beginsWith(name, ".")) { | ||||||
| 			continue; | 			continue; | ||||||
|   | |||||||
| @@ -27,7 +27,7 @@ static ox::Result<const BaseConverter*> findConverter( | |||||||
| static ox::Result<ox::UniquePtr<Wrap>> convert( | static ox::Result<ox::UniquePtr<Wrap>> convert( | ||||||
| 		[[maybe_unused]] keel::Context &ctx, | 		[[maybe_unused]] keel::Context &ctx, | ||||||
| 		ox::Vector<const BaseConverter*> const&converters, | 		ox::Vector<const BaseConverter*> const&converters, | ||||||
| 		[[maybe_unused]] const ox::Buffer &srcBuffer, | 		[[maybe_unused]] ox::Buffer const&srcBuffer, | ||||||
| 		[[maybe_unused]] ox::CRStringView srcTypeName, | 		[[maybe_unused]] ox::CRStringView srcTypeName, | ||||||
| 		[[maybe_unused]] int srcTypeVersion, | 		[[maybe_unused]] int srcTypeVersion, | ||||||
| 		[[maybe_unused]] ox::CRStringView dstTypeName, | 		[[maybe_unused]] ox::CRStringView dstTypeName, | ||||||
| @@ -54,7 +54,7 @@ static ox::Result<ox::UniquePtr<Wrap>> convert( | |||||||
|  |  | ||||||
| ox::Result<ox::UniquePtr<Wrap>> convert( | ox::Result<ox::UniquePtr<Wrap>> convert( | ||||||
| 		[[maybe_unused]] keel::Context &ctx, | 		[[maybe_unused]] keel::Context &ctx, | ||||||
| 		[[maybe_unused]] const ox::Buffer &srcBuffer, | 		[[maybe_unused]] ox::Buffer const&srcBuffer, | ||||||
| 		[[maybe_unused]] ox::CRStringView dstTypeName, | 		[[maybe_unused]] ox::CRStringView dstTypeName, | ||||||
| 		[[maybe_unused]] int dstTypeVersion) noexcept { | 		[[maybe_unused]] int dstTypeVersion) noexcept { | ||||||
| #ifndef OX_BARE_METAL | #ifndef OX_BARE_METAL | ||||||
|   | |||||||
| @@ -8,10 +8,10 @@ namespace keel { | |||||||
|  |  | ||||||
| TypeStore::TypeStore(ox::FileSystem &fs, ox::StringView descPath) noexcept: | TypeStore::TypeStore(ox::FileSystem &fs, ox::StringView descPath) noexcept: | ||||||
| 	m_fs(fs), | 	m_fs(fs), | ||||||
| 	m_descPath(std::move(descPath)) { | 	m_descPath(descPath) { | ||||||
| } | } | ||||||
|  |  | ||||||
| ox::Result<ox::UniquePtr<ox::DescriptorType>> TypeStore::loadDescriptor(ox::CRStringView typeId) noexcept { | ox::Result<ox::UPtr<ox::DescriptorType>> TypeStore::loadDescriptor(ox::CRStringView typeId) noexcept { | ||||||
| 	auto path = ox::sfmt("{}/{}", m_descPath, typeId); | 	auto path = ox::sfmt("{}/{}", m_descPath, typeId); | ||||||
| 	oxRequire(buff, m_fs.read(path)); | 	oxRequire(buff, m_fs.read(path)); | ||||||
| 	auto dt = ox::make_unique<ox::DescriptorType>(); | 	auto dt = ox::make_unique<ox::DescriptorType>(); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user