[Top][All Lists]
[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