gnash-commit
[Top][All Lists]
Advanced

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

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


From: Zou Lunkai
Subject: [Gnash-commit] gnash ChangeLog server/array.cpp
Date: Tue, 14 Aug 2007 06:07:03 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Changes by:     Zou Lunkai <zoulunkai>  07/08/14 06:07:03

Modified files:
        .              : ChangeLog 
        server         : array.cpp 

Log message:
        apply patch#6149 
        * server/array.cpp: replace VLAs with std containers.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.4004&r2=1.4005
http://cvs.savannah.gnu.org/viewcvs/gnash/server/array.cpp?cvsroot=gnash&r1=1.72&r2=1.73

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.4004
retrieving revision 1.4005
diff -u -b -r1.4004 -r1.4005
--- ChangeLog   14 Aug 2007 03:04:28 -0000      1.4004
+++ ChangeLog   14 Aug 2007 06:07:02 -0000      1.4005
@@ -1,3 +1,7 @@
+2007-08-14 Ivor Blockley <address@hidden>
+
+       * server/array.cpp: replace VLAs with std containers.
+         
 2007-08-13 Sandro Santilli <address@hidden>
 
        * testsuite/actionscript.all/TextField.as: add more tests for

Index: server/array.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/array.cpp,v
retrieving revision 1.72
retrieving revision 1.73
diff -u -b -r1.72 -r1.73
--- server/array.cpp    4 Aug 2007 04:23:32 -0000       1.72
+++ server/array.cpp    14 Aug 2007 06:07:03 -0000      1.73
@@ -399,20 +399,21 @@
 class as_value_multiprop
 {
 public:
-       const as_cmp_fn* _cmps;
+       std::deque<as_cmp_fn>& _cmps;
        std::deque<std::string>& _prps;
 
        // Note: all as_cmp_fns in *cmps must implement strict weak ordering
-       as_value_multiprop(std::deque<std::string>& prps, as_cmp_fn* cmps)
+       as_value_multiprop(std::deque<std::string>& prps, 
+               std::deque<as_cmp_fn>& cmps)
                :
+               _cmps(cmps),
                _prps(prps)
        {
-               _cmps = cmps;
        }
 
        bool operator() (const as_value& a, const as_value& b)
        {
-               const as_cmp_fn* cmp = _cmps;
+               std::deque<as_cmp_fn>::iterator cmp = _cmps.begin();
                std::deque<std::string>::iterator pit;
                
                for (pit = _prps.begin(); pit != _prps.end(); ++pit, ++cmp)
@@ -437,14 +438,15 @@
 class as_value_multiprop_eq : public as_value_multiprop
 {
 public:
-       as_value_multiprop_eq(std::deque<std::string>& prps, as_cmp_fn* eq)
-               : as_value_multiprop(prps, eq)
+       as_value_multiprop_eq(std::deque<std::string>& prps, 
+               std::deque<as_cmp_fn>& cmps)
+               : as_value_multiprop(prps, cmps)
        {
        }
 
        bool operator() (const as_value& a, const as_value& b)
        {
-               const as_cmp_fn* cmp = _cmps;
+               std::deque<as_cmp_fn>::iterator cmp = _cmps.begin();
                std::deque<std::string>::iterator pit;
                
                for (pit = _prps.begin(); pit != _prps.end(); ++pit, ++cmp)
@@ -476,20 +478,19 @@
 
 // Convenience function to process and extract flags from an as_value array
 // of flags (as passed to sortOn when sorting on multiple properties)
-static void
+std::deque<uint8_t> 
 get_multi_flags(std::deque<as_value>::const_iterator itBegin, 
-       std::deque<as_value>::const_iterator itEnd, 
-       uint8_t* flgs, bool* uniq, bool* index)
+       std::deque<as_value>::const_iterator itEnd, bool* uniq, bool* index)
 {
        std::deque<as_value>::const_iterator it = itBegin;
-       int i = 0;
+       std::deque<uint8_t> flgs;
 
        // extract fUniqueSort and fReturnIndexedArray from first flag
        if (it != itEnd)
        {
                uint8_t flag = static_cast<uint8_t>((*it).to_number());
                flag = flag_preprocess(flag, uniq, index);
-               flgs[i++] = flag;
+               flgs.push_back(flag);
                ++it;
        }
 
@@ -498,9 +499,10 @@
                uint8_t flag = static_cast<uint8_t>((*it).to_number());
                flag &= ~(as_array_object::fReturnIndexedArray);
                flag &= ~(as_array_object::fUniqueSort);
-               flgs[i++] = flag;
+               flgs.push_back(flag);
                ++it;
        }
+       return flgs;
 }
 
 as_array_object::as_array_object()
@@ -992,8 +994,8 @@
                        ensureType<as_array_object>(fn.arg(0).to_object());
                std::deque<std::string> prp;
                unsigned int optnum = props->size();
-               as_cmp_fn cmp[optnum];
-               as_cmp_fn eq[optnum];
+               std::deque<as_cmp_fn> cmp;
+               std::deque<as_cmp_fn> eq;
 
                for (std::deque<as_value>::const_iterator it = props->begin();
                        it != props->end(); ++it)
@@ -1008,8 +1010,7 @@
                {
                        // assign each cmp function to the standard cmp fn
                        as_cmp_fn c = get_basic_cmp(0, env);
-                       for (unsigned int i = 0; i < optnum; i++)
-                               cmp[i] = c;
+                       cmp.assign(optnum, c);
                }
                // case: sortOn(["prop1", "prop2"], [Array.FLAG1, Array.FLAG2])
                else if ( fn.arg(1).is_object() )
@@ -1018,28 +1019,31 @@
                                
ensureType<as_array_object>(fn.arg(1).to_object());
                        if (farray->size() == optnum)
                        {
-                               uint8_t flgs[optnum];
                                std::deque<as_value>::const_iterator 
                                        fBegin = farray->begin(),
                                        fEnd = farray->end();
 
-                               get_multi_flags(fBegin, fEnd, flgs, 
+                               std::deque<uint8_t> flgs = 
+                                       get_multi_flags(fBegin, fEnd, 
                                        &do_unique, &do_index);
 
-                               for (unsigned int i = 0; i < optnum; i++)
-                                       cmp[i] = get_basic_cmp(flgs[i], env);
+                               std::deque<uint8_t>::const_iterator it = 
+                                       flgs.begin();
+
+                               while (it != flgs.end())
+                                       cmp.push_back(get_basic_cmp(*it++, 
env));
 
                                if (do_unique)
                                {
-                                       for (unsigned int i = 0; i < optnum; 
i++)
-                                               eq[i] = get_basic_eq(flgs[i], 
env);
+                                       it = flgs.begin();
+                                       while (it != flgs.end())
+                                               
eq.push_back(get_basic_eq(*it++, env));
                                }
                        }
                        else
                        {
                                as_cmp_fn c = get_basic_cmp(0, env);
-                               for (unsigned int i = 0; i < optnum; i++)
-                                       cmp[i] = c;
+                               cmp.assign(optnum, c);
                        }
                }
                // case: sortOn(["prop1", "prop2"], Array.FLAG)
@@ -1050,14 +1054,12 @@
                        flag_preprocess(flags, &do_unique, &do_index);
                        as_cmp_fn c = get_basic_cmp(flags, env);
 
-                       for (unsigned int i = 0; i < optnum; i++)
-                               cmp[i] = c;
+                       cmp.assign(optnum, c);
                        
                        if (do_unique)
                        {
                                as_cmp_fn e = get_basic_eq(flags, env);
-                               for (unsigned int i = 0; i < optnum; i++)
-                                       eq[i] = e;
+                               eq.assign(optnum, e);
                        }
                }
 




reply via email to

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