1/****************************************************************************************
2
3 Copyright (C) 2015 Autodesk, Inc.
4 All rights reserved.
5
6 Use of this software is subject to the terms of the Autodesk license agreement
7 provided at the time of installation or download, or which otherwise accompanies
8 this software in either electronic or hard copy form.
9
10****************************************************************************************/
11
12//! \file fbxloadingstrategy.h
13#ifndef _FBXSDK_CORE_LOADING_STRATEGY_H_
14#define _FBXSDK_CORE_LOADING_STRATEGY_H_
15
16#include <fbxsdk/fbxsdk_def.h>
17
18#ifndef FBXSDK_ENV_WINSTORE
19
20#include <fbxsdk/core/fbxplugin.h>
21#include <fbxsdk/core/fbxplugincontainer.h>
22
23#include <fbxsdk/fbxsdk_nsbegin.h>
24
25/**
26 * Abstract class used to implemented some plug-in loading strategy.
27 * A loading strategy dictate how some plug-ins will be loaded for instance.
28 * We could have a simple strategy that loads only a single dll on PC.
29 * We could also implement a strategy that load multiple dlls from a directory.
30 */
31class FBXSDK_DLL FbxLoadingStrategy : public FbxPluginContainer
32{
33public:
34 /** Result state of loading plug-in.
35 */
36 enum EState
37 {
38 eAllLoaded, //!< All plug-in are loaded.
39 eNoneLoaded, //!< No plug-in is loaded, i.e., there is not plug-in to load.
40 eAllFailed, //!< All plug-in are failed to load.
41 eSomeFailed //!< Some plug-ins are loaded but some are failed.
42 };
43
44 /**
45 *\name Public interface
46 */
47 //@{
48 /** Execute the operation of loading the plug-in(s). The way it is executed is determined by the specific implementations.
49 * \param pData Plug in data that can be access inside the plug-ins.
50 * \return If the plugin loading is successful return \c true, otherwise return \c false.
51 */
52 EState Load(FbxPluginData& pData);
53
54 /** Execute the operation of unloading the plug-in(s). The way it is executed is determined by the specific implementations.
55 */
56 void Unload();
57 //@}
58
59protected:
60 /**
61 *\name User implementation
62 */
63 //@{
64 /** Called by the Load method, it contains the specific user implementation strategy to load the desired plug-in(s).
65 * \param pData Plug in data that can be access inside the plug-ins.
66 * \return If the plugin loading is successful return \c true, otherwise return \c false
67 */
68 virtual bool SpecificLoad(FbxPluginData& pData) = 0;
69
70 /** Called by the Unload method, it contains the specific user implementation strategy to unload the desired plug-in(s).
71 */
72 virtual void SpecificUnload(FbxPluginData& pData) = 0;
73 //@}
74
75 //! Whether the plugin is loaded or not.
76 EState mPluginsLoadedState;
77
78private:
79 FbxPluginData mData;
80};
81
82#include <fbxsdk/fbxsdk_nsend.h>
83
84#endif /* !FBXSDK_ENV_WINSTORE */
85
86#endif /* _FBXSDK_CORE_LOADING_STRATEGY_H_ */
87