AAX SDK  2.4.1
Avid Audio Extensions Development Kit
AAX_CPacketDispatcher.h
Go to the documentation of this file.
1 /*================================================================================================*/
2 /*
3  *
4  * Copyright 2013-2017 by Avid Technology, Inc.
5  * All rights reserved.
6  *
7  * CONFIDENTIAL: This document contains confidential information. Do not
8  * read or examine this document unless you are an Avid Technology employee
9  * or have signed a non-disclosure agreement with Avid Technology which protects
10  * the confidentiality of this document. DO NOT DISCLOSE ANY INFORMATION
11  * CONTAINED IN THIS DOCUMENT TO ANY THIRD-PARTY WITHOUT THE PRIOR WRITTEN CONSENT
12  * OF Avid Technology, INC.
13  *
14  */
15 
22 /*================================================================================================*/
23 
24 
25 #ifndef AAX_CPACKETDISPATCHER_H
26 #define AAX_CPACKETDISPATCHER_H
27 
28 #include "AAX.h"
29 #include "AAX_IController.h"
30 #include "AAX_CMutex.h"
31 
32 #include <string>
33 #include <map>
34 
35 
45 {
46 public:
47  AAX_CPacket(AAX_CFieldIndex inFieldIndex) : mID(inFieldIndex), mDirty(true), mDataSize(0) {}
49 
50  template<typename DataType>
51  DataType* GetPtr()
52  {
53  mDataSize = sizeof(DataType);
54  void * data = mPacketData.Get(mDataSize);
55  return reinterpret_cast<DataType*> (data);
56  }
57 
58  void SetDirty(bool iDirty) { mDirty = iDirty; };
59  bool IsDirty() const { return mDirty; };
60 
61  AAX_CFieldIndex GetID() const { return mID; };
62  uint32_t GetSize() const { return mDataSize; }
63 
64 private:
65  AAX_CFieldIndex mID;
66  bool mDirty;
67  uint32_t mDataSize;
68 
69 private:
70  struct SPacketData
71  {
72  public:
73  SPacketData();
74  ~SPacketData();
75  const void* Get() const;
76  void* Get(size_t newSize) const;
77  private:
78  mutable void* mData;
79  } mPacketData;
80 };
81 
82 // GetPtr() specialization for void*
83 template <>
84 inline const void*
85 AAX_CPacket::GetPtr<const void>()
86 {
87  return mPacketData.Get();
88 }
89 
90 
94 {
95  virtual ~AAX_IPacketHandler() {};
96  virtual AAX_IPacketHandler* Clone() const = 0;
97  virtual AAX_Result Call( AAX_CParamID inParamID, AAX_CPacket& ioPacket ) const = 0;
98 };
99 
102 template<class TWorker>
104 {
105  typedef AAX_Result(TWorker::*fPt2Fn)(AAX_CPacket&);
106  typedef AAX_Result(TWorker::*fPt2FnEx)(AAX_CParamID, AAX_CPacket&);
107 
108 public:
109  AAX_CPacketHandler( TWorker* iPt2Object, fPt2Fn infPt )
110  : pt2Object(iPt2Object), fpt(infPt), fptEx(NULL) {}
111 
112  AAX_CPacketHandler( TWorker* iPt2Object, fPt2FnEx infPt )
113  : pt2Object(iPt2Object), fpt(NULL), fptEx(infPt) {}
114 
116  {
117  return new AAX_CPacketHandler(*this);
118  }
119 
120  AAX_Result Call( AAX_CParamID inParamID, AAX_CPacket& ioPacket ) const
121  {
122  if (fptEx)
123  return (*pt2Object.*fptEx)( inParamID, ioPacket);
124  else if (fpt)
125  return (*pt2Object.*fpt)( ioPacket);
126  else
127  return AAX_ERROR_NULL_OBJECT;
128  }
129 
130 protected:
131  TWorker * pt2Object; // pointer to object
132  fPt2Fn fpt ; // pointer to member function
133  fPt2FnEx fptEx ; // pointer to member function
134 };
135 
136 
138 
153 {
154  typedef std::map<AAX_CFieldIndex, AAX_CPacket*> PacketsHolder;
155  typedef std::multimap<std::string, std::pair<AAX_CPacket*, AAX_IPacketHandler*> > PacketsHandlersMap;
156 
157 public:
160 
161  void Initialize( AAX_IController* iPlugIn, AAX_IEffectParameters* iEffectParameters);
162 
164 
165  template <class TWorker, typename Func>
167  TWorker* iPt2Object, Func infPt)
168  {
169  AAX_CPacketHandler<TWorker> handler(iPt2Object, infPt);
170  return RegisterPacket(paramID, portID, &handler);
171  }
172 
174  {
176  return RegisterPacket(paramID, portID, &handler);
177  }
178 
179  AAX_Result SetDirty(AAX_CParamID paramID, bool iDirty = true);
180 
182 
184 
185 private:
186  PacketsHolder mPacketsHolder;
187  PacketsHandlersMap mPacketsHandlers;
188  AAX_IController* mController;
189  AAX_IEffectParameters* mEffectParameters;
190 
191  AAX_CMutex mLockGuard;
192 };
193 
194 
195 #endif // AAX_CPACKETDISPATCHER_H
Various utility definitions for AAX.
const char * AAX_CParamID
Parameter identifier.
Definition: AAX.h:352
int32_t AAX_Result
Definition: AAX.h:337
AAX_CIndex AAX_CFieldIndex
Not used by AAX plug-ins (except in AAX_FIELD_INDEX macro)
Definition: AAX.h:349
@ AAX_ERROR_NULL_OBJECT
Definition: AAX_Errors.h:44
Interface for the AAX host's view of a single instance of an effect.
Mutex with try lock functionality.
Definition: AAX_CMutex.h:30
Container for packet-related data.
Definition: AAX_CPacketDispatcher.h:45
bool IsDirty() const
Definition: AAX_CPacketDispatcher.h:59
void SetDirty(bool iDirty)
Definition: AAX_CPacketDispatcher.h:58
DataType * GetPtr()
Definition: AAX_CPacketDispatcher.h:51
uint32_t GetSize() const
Definition: AAX_CPacketDispatcher.h:62
~AAX_CPacket()
Definition: AAX_CPacketDispatcher.h:48
AAX_CFieldIndex GetID() const
Definition: AAX_CPacketDispatcher.h:61
AAX_CPacket(AAX_CFieldIndex inFieldIndex)
Definition: AAX_CPacketDispatcher.h:47
Callback container used by AAX_CPacketDispatcher.
Definition: AAX_CPacketDispatcher.h:94
virtual AAX_IPacketHandler * Clone() const =0
virtual AAX_Result Call(AAX_CParamID inParamID, AAX_CPacket &ioPacket) const =0
virtual ~AAX_IPacketHandler()
Definition: AAX_CPacketDispatcher.h:95
Callback container used by AAX_CPacketDispatcher.
Definition: AAX_CPacketDispatcher.h:104
AAX_Result Call(AAX_CParamID inParamID, AAX_CPacket &ioPacket) const
Definition: AAX_CPacketDispatcher.h:120
AAX_CPacketHandler(TWorker *iPt2Object, fPt2Fn infPt)
Definition: AAX_CPacketDispatcher.h:109
fPt2Fn fpt
Definition: AAX_CPacketDispatcher.h:132
TWorker * pt2Object
Definition: AAX_CPacketDispatcher.h:131
AAX_IPacketHandler * Clone() const
Definition: AAX_CPacketDispatcher.h:115
fPt2FnEx fptEx
Definition: AAX_CPacketDispatcher.h:133
AAX_CPacketHandler(TWorker *iPt2Object, fPt2FnEx infPt)
Definition: AAX_CPacketDispatcher.h:112
Helper class for managing AAX packet posting.
Definition: AAX_CPacketDispatcher.h:153
AAX_Result RegisterPacket(AAX_CParamID paramID, AAX_CFieldIndex portID, const AAX_IPacketHandler *iHandler)
AAX_Result SetDirty(AAX_CParamID paramID, bool iDirty=true)
AAX_Result RegisterPacket(AAX_CParamID paramID, AAX_CFieldIndex portID)
Definition: AAX_CPacketDispatcher.h:173
void Initialize(AAX_IController *iPlugIn, AAX_IEffectParameters *iEffectParameters)
AAX_Result Dispatch()
AAX_Result RegisterPacket(AAX_CParamID paramID, AAX_CFieldIndex portID, TWorker *iPt2Object, Func infPt)
Definition: AAX_CPacketDispatcher.h:166
AAX_Result GenerateSingleValuePacket(AAX_CParamID iParam, AAX_CPacket &ioPacket)
Interface for the AAX host's view of a single instance of an effect. Used by both clients of the AAX ...
Definition: AAX_IController.h:44
The interface for an AAX Plug-in's data model.
Definition: AAX_IEffectParameters.h:83