@@ -41,6 +41,19 @@ namespace
4141 normalizedDesc = *desc;
4242 return AssetSuite::Result::Success;
4343 }
44+
45+ AssetSuite::Result MapFileLoadResult (AssetSuite::ErrorCode error)
46+ {
47+ switch (error)
48+ {
49+ case AssetSuite::ErrorCode::OK :
50+ return AssetSuite::Result::Success;
51+ case AssetSuite::ErrorCode::NonExistingFile:
52+ return AssetSuite::Result::ErrorFileNotFound;
53+ default :
54+ return AssetSuite::Result::ErrorUnknown;
55+ }
56+ }
4457}
4558
4659AssetSuite::Result AssetSuite::GetVersion (Version* outVersion)
@@ -76,6 +89,8 @@ const char* AssetSuite::GetResultString(Result result)
7689 return " Error: out of memory" ;
7790 case Result::ErrorInvalidContext:
7891 return " Error: invalid context" ;
92+ case Result::ErrorInvalidHandle:
93+ return " Error: invalid handle" ;
7994 case Result::ErrorUnknown:
8095 return " Error: unknown" ;
8196 default :
@@ -125,6 +140,59 @@ AssetSuite::Result AssetSuite::SetLoggingCallback(
125140 return Result::Success;
126141}
127142
143+ AssetSuite::Result AssetSuite::LoadFile (ContextHandle context, const char * filePath, BlobHandle* outBlob)
144+ {
145+ if (!context)
146+ {
147+ return Result::ErrorInvalidContext;
148+ }
149+
150+ if (!filePath || !outBlob || *outBlob)
151+ {
152+ return Result::ErrorInvalidArgument;
153+ }
154+
155+ std::vector<uint8_t > rawBytes;
156+ const ErrorCode loadResult = context->Runtime ().FileLoader ().LoadToMemory (filePath, true , rawBytes);
157+ const Result mappedResult = MapFileLoadResult (loadResult);
158+ if (mappedResult != Result::Success)
159+ {
160+ context->Runtime ().Diagnostics ().Add (loadResult, " Failed to load blob source file." );
161+ return mappedResult;
162+ }
163+
164+ try
165+ {
166+ Internal::Blob blob (std::move (rawBytes), Internal::MakeBlobSourceMetadata (filePath));
167+ *outBlob = context->Runtime ().BlobStorage ().Create (std::move (blob));
168+ }
169+ catch (const std::bad_alloc&)
170+ {
171+ return Result::ErrorOutOfMemory;
172+ }
173+ catch (...)
174+ {
175+ return Result::ErrorUnknown;
176+ }
177+
178+ return Result::Success;
179+ }
180+
181+ AssetSuite::Result AssetSuite::ReleaseBlob (ContextHandle context, BlobHandle* blob)
182+ {
183+ if (!context)
184+ {
185+ return Result::ErrorInvalidContext;
186+ }
187+
188+ if (!blob || !*blob)
189+ {
190+ return Result::ErrorInvalidHandle;
191+ }
192+
193+ return context->Runtime ().BlobStorage ().Release (blob);
194+ }
195+
128196AssetSuite::Manager::Manager ()
129197 : runtimeState(new Internal::RuntimeState())
130198 , ownsRuntimeState(true )
0 commit comments