]> git.saurik.com Git - apple/security.git/blobdiff - Security/libsecurity_transform/lib/TransformFactory.h
Security-57031.1.35.tar.gz
[apple/security.git] / Security / libsecurity_transform / lib / TransformFactory.h
diff --git a/Security/libsecurity_transform/lib/TransformFactory.h b/Security/libsecurity_transform/lib/TransformFactory.h
new file mode 100644 (file)
index 0000000..2e9ec45
--- /dev/null
@@ -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