My Project
IDataLoader.h
1 #pragma once
2 #include "NPLMessageQueue.h"
3 #include <boost/noncopyable.hpp>
4 
5 namespace ParaEngine
6 {
15  {
16  public:
17  virtual ~IDataLoader(){};
18 
20  virtual const char* GetFileName() {return 0;};
21 
23  virtual const char* GetKeyName() {return 0;};
24 
26  virtual HRESULT Decompress( void** ppData, int* pcBytes ) = 0;
28  virtual HRESULT Destroy() = 0;
30  virtual HRESULT Load() = 0;
31 
33  virtual void SetEstimatedSizeInBytes(int nSize) {};
34 
36  virtual int GetEstimatedSizeInBytes() {return 0;};
37 
39  virtual bool IsDeviceObject() { return true; };
40  };
41 
42 
45  {
46  public:
47  virtual int GetProcessorQueueID(){return 0;};
48 
53  virtual void* GetCurlInterface(int nID = 0) {return NULL;};
54 
56  virtual void AddBytesProcessed(int nBytesProcessed) {};
57 
59  virtual int GetBytesProcessed() {return 0;};
60  };
61 
77  {
78  public:
79  virtual ~IDataProcessor(){};
80 
82  virtual HRESULT LockDeviceObject() = 0;
84  virtual HRESULT UnLockDeviceObject() = 0;
86  virtual HRESULT Destroy() = 0;
88  virtual HRESULT Process( void* pData, int cBytes ) = 0;
90  virtual HRESULT CopyToResource() = 0;
92  virtual void SetResourceError() = 0;
93 
95  virtual void SetProcessorWorkerData(IProcessorWorkerData * pThreadLocalData ) {};
97  virtual IProcessorWorkerData * GetProcessorWorkerData() {return NULL;};
98 
100  virtual bool IsDeviceObject() { return true; };
101  };
102 
103 
106  {
107  ResourceRequestType_Local,
108  ResourceRequestType_Asset,
109  ResourceRequestType_Web,
110  ResourceRequestType_Quit,
111  };
112 
115  {
116  ResourceRequestID_Local = 0,
117  ResourceRequestID_Asset,
118  ResourceRequestID_Web,
119  ResourceRequestID_Asset_BigFile,
120  ResourceRequestID_AudioFile,
121  };
122 
124  struct ResourceRequest :
125  public ParaEngine::PoolBase<ResourceRequest>,
127  private boost::noncopyable
128  {
129  ResourceRequest(ResourceRequestType nType = ResourceRequestType_Local):m_nType(nType),m_pDataLoader(NULL), m_pDataProcessor(NULL), m_ppDeviceObject(NULL), m_pHR(NULL), m_nProcessorQueueID(0), m_last_error_code(S_OK) {}
130  virtual ~ResourceRequest();
131 
134 
135  IDataLoader* m_pDataLoader;
136  IDataProcessor* m_pDataProcessor;
137  HRESULT* m_pHR;
138  HRESULT m_last_error_code;
139  void** m_ppDeviceObject;
148 
149  bool m_bLock;
150  bool m_bCopy;
151  bool m_bError;
152  };
153  typedef ParaIntrusivePtr<ResourceRequest> ResourceRequest_ptr;
154 
156  class CResourceRequestQueue : public NPL::concurrent_ptr_queue<ResourceRequest_ptr>
157  {
158  public:
160  CResourceRequestQueue(int capacity);
162 
163  BufferStatus try_push(ResourceRequest_ptr& item);
164  };
165 }
ResourceRequestType
resource request type.
Definition: IDataLoader.h:105
virtual bool IsDeviceObject()
default to true.
Definition: IDataLoader.h:39
virtual HRESULT Decompress(void **ppData, int *pcBytes)=0
Decompress is called by one of the processing threads to decompress the data.
it implements a producer/consumer(s) queue design pattern.
Definition: NPLMessageQueue.h:26
virtual void * GetCurlInterface(int nID=0)
get the libcurl easy interface that this thread is related to.
Definition: IDataLoader.h:53
different physics engine has different winding order.
Definition: EventBinding.h:32
the message queue
Definition: IDataLoader.h:156
ResourceRequestType m_nType
request type
Definition: IDataLoader.h:133
virtual int GetEstimatedSizeInBytes()
this function is solely used in statistics reporting.
Definition: IDataLoader.h:36
virtual HRESULT Destroy()=0
Destroy is called by the graphics thread when it has consumed the data, unless IsDeviceObject() is fa...
interface of processor worker data
Definition: IDataLoader.h:44
virtual IProcessorWorkerData * GetProcessorWorkerData()
get thread local data.
Definition: IDataLoader.h:97
multi-threaded reference counted base class for boost::intrusive_ptr all boost::intrusive_ptr<T>, should derive from this class.
Definition: intrusive_ptr.h:47
virtual bool IsDeviceObject()
default to true.
Definition: IDataLoader.h:100
virtual int GetBytesProcessed()
get total number of bytes processed.
Definition: IDataLoader.h:59
virtual HRESULT Load()=0
Load is called from the IO thread to load data.
virtual void AddBytesProcessed(int nBytesProcessed)
add number of bytes processed.
Definition: IDataLoader.h:56
IDataProcessor is an interface that the AsyncLoader class uses to process and copy data into locked r...
Definition: IDataLoader.h:76
virtual void SetProcessorWorkerData(IProcessorWorkerData *pThreadLocalData)
set thread local data.
Definition: IDataLoader.h:95
if one wants to create and delete many objects of the same type per frame, derive your class from Poo...
Definition: PoolBase.h:60
IDataLoader is an interface that the AsyncLoader class uses to load data from disk.
Definition: IDataLoader.h:14
virtual const char * GetFileName()
get the file name
Definition: IDataLoader.h:20
ResourceRequestID
predefined resource request id.
Definition: IDataLoader.h:114
ParaEngine resource request.
Definition: IDataLoader.h:124
virtual const char * GetKeyName()
get the key name
Definition: IDataLoader.h:23
int m_nProcessorQueueID
process queue id, default to 0.
Definition: IDataLoader.h:147
virtual void SetEstimatedSizeInBytes(int nSize)
this function is solely used in statistics reporting.
Definition: IDataLoader.h:33