gnash-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Gnash-commit] /srv/bzr/gnash/trunk r10799: Minor cleanup to marking SWF


From: Benjamin Wolsey
Subject: [Gnash-commit] /srv/bzr/gnash/trunk r10799: Minor cleanup to marking SWFMovieDefinition resources, extend generic
Date: Thu, 16 Apr 2009 09:36:24 +0200
User-agent: Bazaar (1.5)

------------------------------------------------------------
revno: 10799
committer: Benjamin Wolsey <address@hidden>
branch nick: trunk
timestamp: Thu 2009-04-16 09:36:24 +0200
message:
  Minor cleanup to marking SWFMovieDefinition resources, extend generic
  templates.
modified:
  libbase/GnashAlgorithm.h
  libcore/parser/SWFMovieDefinition.cpp
    ------------------------------------------------------------
    revno: 10792.1.1
    committer: Benjamin Wolsey <address@hidden>
    branch nick: temp
    timestamp: Wed 2009-04-15 17:04:06 +0200
    message:
      Replace loops in markReachableResources.
    modified:
      libcore/parser/SWFMovieDefinition.cpp
    ------------------------------------------------------------
    revno: 10792.1.2
    committer: Benjamin Wolsey <address@hidden>
    branch nick: temp
    timestamp: Wed 2009-04-15 17:30:11 +0200
    message:
      Extend RemovePointer<>, use a template function to mark the mapped
      resources in SWFMovieDefinition.
    modified:
      libbase/GnashAlgorithm.h
      libcore/parser/SWFMovieDefinition.cpp
    ------------------------------------------------------------
    revno: 10792.1.3
    committer: Benjamin Wolsey <address@hidden>
    branch nick: temp
    timestamp: Wed 2009-04-15 18:12:31 +0200
    message:
      Move to anonymous namespace.
    modified:
      libcore/parser/SWFMovieDefinition.cpp
=== modified file 'libbase/GnashAlgorithm.h'
--- a/libbase/GnashAlgorithm.h  2009-03-14 09:22:52 +0000
+++ b/libbase/GnashAlgorithm.h  2009-04-15 15:30:11 +0000
@@ -22,6 +22,8 @@
 
 #include <algorithm>
 #include <boost/checked_delete.hpp>
+#include <boost/intrusive_ptr.hpp>
+#include <boost/shared_ptr.hpp>
 
 namespace gnash {
 
@@ -58,6 +60,20 @@
     typedef typename RemovePointer<T>::value_type value_type;
 };
 
+template<typename T>
+struct RemovePointer<boost::intrusive_ptr<T> >
+{
+    typedef typename RemovePointer<T>::value_type value_type;
+};
+
+template<typename T>
+struct RemovePointer<boost::shared_ptr<T> >
+{
+    typedef typename RemovePointer<T>::value_type value_type;
+};
+
+
+
 /// Delete a pointer safely
 //
 /// Any depth of pointers-to-pointers (up to maximum template recursion) can

=== modified file 'libcore/parser/SWFMovieDefinition.cpp'
--- a/libcore/parser/SWFMovieDefinition.cpp     2009-04-15 05:33:51 +0000
+++ b/libcore/parser/SWFMovieDefinition.cpp     2009-04-15 16:12:31 +0000
@@ -64,6 +64,10 @@
 namespace gnash
 {
 
+namespace {
+    template<typename T> void markMappedResources(const T& t);
+}
+
 MovieLoader::MovieLoader(SWFMovieDefinition& md)
        :
        _movie_def(md),
@@ -856,37 +860,17 @@
 void
 SWFMovieDefinition::markReachableResources() const
 {
-       for (FontMap::const_iterator i=m_fonts.begin(), e=m_fonts.end(); i!=e; 
++i)
-       {
-               i->second->setReachable();
-       }
-
-       for (Bitmaps::const_iterator i = _bitmaps.begin(), e = _bitmaps.end();
-            i != e; ++i)
-       {
-               i->second->setReachable();
-       }
-
-       for (SoundSampleMap::const_iterator i=m_sound_samples.begin(), 
e=m_sound_samples.end(); i!=e; ++i)
-       {
-               i->second->setReachable();
-       }
-
-       // TODO: turn this into a markExportedResources()
+    markMappedResources(m_fonts);
+    markMappedResources(_bitmaps);
+    markMappedResources(m_sound_samples);
+
        {
                boost::mutex::scoped_lock lock(_exportedResourcesMutex);
-               for (ExportMap::const_iterator i=_exportedResources.begin(),
-                e=_exportedResources.end(); i!=e; ++i)
-               {
-                       i->second->setReachable();
-               }
+        markMappedResources(_exportedResources);
        }
 
-       for (ImportVect::const_iterator i=m_import_source_movies.begin(),
-            e=m_import_source_movies.end(); i!=e; ++i)
-       {
-               (*i)->setReachable();
-       }
+    std::for_each(m_import_source_movies.begin(), m_import_source_movies.end(),
+           boost::mem_fn(&movie_definition::setReachable));
 
        boost::mutex::scoped_lock lock(_dictionaryMutex);
        _dictionary.markReachableResources();
@@ -939,4 +923,20 @@
        }
 }
 
+namespace {
+
+template<typename T>
+void markMappedResources(const T& t)
+{
+    typedef typename
+        RemovePointer<typename T::value_type::second_type>::value_type
+        contained_type;
+
+    std::for_each(t.begin(), t.end(),
+            boost::bind(&contained_type::setReachable,
+                boost::bind(SecondElement<typename T::value_type>(), _1)));
+}
+
+}
+
 } // namespace gnash


reply via email to

[Prev in Thread] Current Thread [Next in Thread]