X-Git-Url: https://git.saurik.com/apple/security.git/blobdiff_plain/72a12576750f52947eb043106ba5c12c0d07decf..b1ab9ed8d0e0f1c3b66d7daa8fd5564444c56195:/libsecurity_transform/lib/TransformFactory.h diff --git a/libsecurity_transform/lib/TransformFactory.h b/libsecurity_transform/lib/TransformFactory.h new file mode 100644 index 00000000..2e9ec455 --- /dev/null +++ b/libsecurity_transform/lib/TransformFactory.h @@ -0,0 +1,36 @@ +#ifndef __TRANSFORM_FACTORY__ +#define __TRANSFORM_FACTORY__ + +#include "Transform.h" +#include "LinkedList.h" + +class TransformFactory +{ +protected: + static void Register(TransformFactory* tf); + static dispatch_once_t gSetup; + static dispatch_queue_t gRegisteredQueue; + static CFMutableDictionaryRef gRegistered; + + CFStringRef mCFType; + + static TransformFactory* FindTransformFactoryByType(CFStringRef type); + static void RegisterTransforms(); + static void RegisterTransform(TransformFactory* tf, CFStringRef cfname = NULL); + static void Setup(void *); + +private: + static bool RegisterTransform_prelocked(TransformFactory* tf, CFStringRef name); + +public: + static SecTransformRef MakeTransformWithType(CFStringRef type, CFErrorRef* baseError); + + TransformFactory(CFStringRef type, bool registerGlobally = false, CFStringRef cftype = NULL); + static void Setup(); + virtual CFTypeRef Make() = 0; + CFStringRef GetTypename() { return mCFType; }; +}; + + + +#endif