gnash-commit
[Top][All Lists]
Advanced

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

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


From: Sandro Santilli
Subject: [Gnash-commit] gnash ChangeLog server/as_object.cpp
Date: Thu, 05 Oct 2006 16:05:02 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Changes by:     Sandro Santilli <strk>  06/10/05 16:05:02

Modified files:
        .              : ChangeLog 
        server         : as_object.cpp 

Log message:
                * server/as_object.cpp (setPropFlags): added support for
                property arg being a comma-separated list string, minor
                cleanups to reduce memory copies.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.1042&r2=1.1043
http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_object.cpp?cvsroot=gnash&r1=1.10&r2=1.11

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.1042
retrieving revision 1.1043
diff -u -b -r1.1042 -r1.1043
--- ChangeLog   5 Oct 2006 16:03:36 -0000       1.1042
+++ ChangeLog   5 Oct 2006 16:05:01 -0000       1.1043
@@ -1,3 +1,9 @@
+2006-10-05 Sandro Santilli <address@hidden>
+
+       * server/as_object.cpp (setPropFlags): added support for
+       property arg being a comma-separated list string, minor
+       cleanups to reduce memory copies.
+
 2006-10-05 Markus Gothe <address@hidden>
 
        * libbase/log.cpp: Added #define BOOST_HAS_THREADS.

Index: server/as_object.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/as_object.cpp,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -b -r1.10 -r1.11
--- server/as_object.cpp        4 Oct 2006 14:46:35 -0000       1.10
+++ server/as_object.cpp        5 Oct 2006 16:05:02 -0000       1.11
@@ -201,6 +201,47 @@
 void
 as_object::setPropFlags(as_value& props_val, int set_false, int set_true)
 {
+       if ( props_val.get_type() == as_value::STRING )
+       {
+               std::string propstr = props_val.to_string();
+               for(;;)
+               {
+                       std::string prop;
+                       size_t next_comma=propstr.find(",");
+                       if ( next_comma == std::string::npos )
+                       {
+                               prop=propstr;
+                       } 
+                       else
+                       {
+                               prop=propstr.substr(0,next_comma);
+                               propstr=propstr.substr(next_comma);
+                       }
+
+               stringi_hash<as_member>::iterator it = \
+                       m_members.find(prop.c_str());
+               if ( it != m_members.end() )
+               {
+                       as_member& member = it->second;
+                       as_prop_flags f = member.get_member_flags();
+                       f.set_flags(set_true, set_false);
+                       member.set_member_flags(f);
+               }
+               else
+               {
+                       log_warning("Unknown object property %s, "
+                               "can't set propflags on it", prop.c_str());
+               }
+
+
+                       if ( next_comma == std::string::npos )
+                       {
+                               break;
+                       }
+               }
+               return;
+       }
+
        as_object* props = props_val.to_object();
 
        // Evan: it seems that if set_true == 0 and set_false == 0,
@@ -220,41 +261,31 @@
 
                // Take all the members of the object
 
-               stringi_hash<as_member>::const_iterator it = m_members.begin();
+               stringi_hash<as_member>::iterator it = m_members.begin();
                while (it != m_members.end())
                {
-                       as_member member = it->second;
-
+                       as_member& member = it->second;
                        as_prop_flags f = member.get_member_flags();
-                       f.get_flags();
                        f.set_flags(set_true, set_false);
                        member.set_member_flags(f);
-
-                       // why don't we directly set flags on the
-                       // actual member instead ?
-                       m_members[it->first] = member;
-
                        ++it;
                }
 
+               // Are we sure we need to descend to __proto__ ?
+               // should we recurse then ?
+
                if (m_prototype != NULL)
                {
-                       const as_object* prototype = m_prototype;
+                       as_object* prototype = m_prototype;
 
                        it = prototype->m_members.begin();
                        while (it != prototype->m_members.end())
                        {
-                               as_member member = it->second;
-
+                               as_member& member = it->second;
                                as_prop_flags f = member.get_member_flags();
-                               //const int oldflags =
-                               f.get_flags();
-                               //const int newflags = 
                                f.set_flags(set_true, set_false);
                                member.set_member_flags(f);
 
-                               m_members[it->first] = member;
-
                                ++it;
                        }
                }
@@ -271,13 +302,11 @@
 
                        if (it2 != m_members.end())
                        {
-                               as_member member = it2->second;
+                               as_member& member = it2->second;
 
                                as_prop_flags f = member.get_member_flags();
-                               f.get_flags();
                                f.set_flags(set_true, set_false);
                                member.set_member_flags(f);
-                               
m_members[it->second.get_member_value().to_string()] = member;
                        }
 
                        ++it;




reply via email to

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