--- /dev/null
+
+#include "SingleShotSource.h"
+#include <string>
+
+using namespace std;
+
+CFStringRef gSingleShotSourceName = CFSTR("Single Shot Source");
+
+SingleShotSource::SingleShotSource(CFTypeRef value, Transform* t, CFStringRef name) :
+ Source(gSingleShotSourceName, t, name)
+{
+ SetValue(value);
+}
+
+void SingleShotSource::DoActivate()
+{
+ // Make sure our destination doesn't vanish while we are sending it data (or the final NULL)
+ CFRetain(mDestination->GetCFObject());
+
+ // take our value and send it on its way
+ mDestination->SetAttribute(mDestinationName, GetValue());
+
+ // send an end of stream
+ mDestination->SetAttribute(mDestinationName, NULL);
+
+ CFRelease(mDestination->GetCFObject());
+}
+
+
+
+Boolean SingleShotSource::Equal(const CoreFoundationObject* obj)
+{
+ if (Source::Equal(obj))
+ {
+ const SingleShotSource* sss = (const SingleShotSource*) obj;
+ return CFEqual(GetValue(), sss->GetValue());
+ }
+
+ return false;
+}
+
+
+
+CFTypeRef SingleShotSource::Make(CFTypeRef value, Transform* t, CFStringRef name)
+{
+ return CoreFoundationHolder::MakeHolder(gInternalCFObjectName, new SingleShotSource(value, t, name));
+}
+
+
+
+std::string SingleShotSource::DebugDescription()
+{
+ string result = Source::DebugDescription() + ": SingleShotSource ";
+
+ char buffer[256];
+ snprintf(buffer, sizeof(buffer), "(value = %p)", GetValue());
+
+ result += buffer;
+
+ return result;
+}