+SoundManager::manage_source(std::unique_ptr<SoundSource> source)
+{
+ assert(source);
+ if (dynamic_cast<OpenALSoundSource*>(source.get()))
+ {
+ std::unique_ptr<OpenALSoundSource> openal_source(dynamic_cast<OpenALSoundSource*>(source.release()));
+ sources.push_back(std::move(openal_source));
+ }
+}
+
+void
+SoundManager::register_for_update(StreamSoundSource* sss)
+{
+ if (sss)
+ {
+ update_list.push_back(sss);
+ }
+}
+
+void
+SoundManager::remove_from_update(StreamSoundSource* sss)
+{
+ if (sss)
+ {
+ StreamSoundSources::iterator i = update_list.begin();
+ while( i != update_list.end() ){
+ if( *i == sss ){
+ i = update_list.erase(i);
+ } else {
+ i++;
+ }
+ }
+ }
+}
+
+void