gnash-commit
[Top][All Lists]
Advanced

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

[Gnash-commit] gnash ChangeLog server/as_value.cpp


From: Sandro Santilli
Subject: [Gnash-commit] gnash ChangeLog server/as_value.cpp
Date: Sat, 17 Nov 2007 08:33:54 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Changes by:     Sandro Santilli <strk>  07/11/17 08:33:54

Modified files:
        .              : ChangeLog 
        server         : as_value.cpp 

Log message:
        (SpriteProxy:find_sprite_by_target): Optimize implementation
        based on the assumption that a sprite target is always in "dot" syntax.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.4883&r2=1.4884
http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_value.cpp?cvsroot=gnash&r1=1.94&r2=1.95

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.4883
retrieving revision 1.4884
diff -u -b -r1.4883 -r1.4884
--- ChangeLog   16 Nov 2007 21:28:53 -0000      1.4883
+++ ChangeLog   17 Nov 2007 08:33:53 -0000      1.4884
@@ -1,3 +1,9 @@
+2007-11-17 Sandro Santilli <address@hidden>
+
+       * server/as_value.cpp (SpriteProxy:find_sprite_by_target):
+         Make a more optimized implementation based on the assumption
+         that a sprite target is always in "dot" syntax.
+
 2007-11-16 Sandro Santilli <address@hidden>
 
        * server/: as_object.h, character.h: add virtual to_character()

Index: server/as_value.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/as_value.cpp,v
retrieving revision 1.94
retrieving revision 1.95
diff -u -b -r1.94 -r1.95
--- server/as_value.cpp 15 Nov 2007 19:41:34 -0000      1.94
+++ server/as_value.cpp 17 Nov 2007 08:33:54 -0000      1.95
@@ -1426,11 +1426,29 @@
 {
        if ( tgtstr.empty() ) return NULL;
 
-       sprite_instance* root = VM::get().getRoot().get_root_movie();
-       as_environment& env = root->get_environment();
-       character* target = env.find_target(tgtstr);
-       if ( ! target ) return NULL;
-       return target->to_movie();
+       VM& vm = VM::get();
+       string_table& st = vm.getStringTable();
+       as_object* o = vm.getRoot().get_root_movie();
+
+       // TODO: for another optimization we may cache
+       //       the string_table::key for each element
+       //       as the SpriteProxy target (instead of
+       //       the full string, to be parsed everytime)
+
+       string::size_type size = tgtstr.size();
+       string::size_type from = 0;
+       while ( string::size_type to=tgtstr.find_first_of('.', from) )
+       {
+               string part(tgtstr, from, to-from);
+               o = o->get_path_element(st.find(part));
+               if ( ! o ) {
+                       log_debug("Target path element %s not found", 
part.c_str());
+                       return NULL;
+               }
+               if ( to == string::npos ) break;
+               from = to+1;
+       }
+       return o->to_movie();
 }
 
 void




reply via email to

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