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 server/array.h


From: Michael Carlson
Subject: [Gnash-commit] gnash ./ChangeLog server/array.cpp server/array.h
Date: Tue, 24 Jan 2006 06:03:59 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Branch:         
Changes by:     Michael Carlson <address@hidden>        06/01/24 06:03:59

Modified files:
        .              : ChangeLog 
        server         : array.cpp array.h 

Log message:
        Convert as_array_object to use STL deque instead of STL vector, and 
implement actionscript functions array::shift and array::unshift

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/gnash/ChangeLog.diff?tr1=1.38&tr2=1.39&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/gnash/gnash/server/array.cpp.diff?tr1=1.2&tr2=1.3&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/gnash/gnash/server/array.h.diff?tr1=1.1&tr2=1.2&r1=text&r2=text

Patches:
Index: gnash/ChangeLog
diff -u gnash/ChangeLog:1.38 gnash/ChangeLog:1.39
--- gnash/ChangeLog:1.38        Tue Jan 24 01:33:01 2006
+++ gnash/ChangeLog     Tue Jan 24 06:03:59 2006
@@ -1,3 +1,8 @@
+2006-01-23 Michael Carlson <address@hidden>
+
+       * server/array.h: as_array_object now uses deque instead of vector
+       * server/array.cpp: Implement array::unshift, shift
+
 2006-01-23  Rob Savoye  <address@hidden>
 
        * plugin/player.cpp, player.h: Neew file for Flash player within
Index: gnash/server/array.cpp
diff -u gnash/server/array.cpp:1.2 gnash/server/array.cpp:1.3
--- gnash/server/array.cpp:1.2  Mon Jan 23 17:01:13 2006
+++ gnash/server/array.cpp      Tue Jan 24 06:03:59 2006
@@ -105,11 +105,11 @@
                fn.result->set_int(array->size());
        }
 
-       // Callback to push values to array
+       // Callback to push values to the back of an array
        void array_push(const fn_call& fn)
        {
                as_array_object* array = (as_array_object*) (as_object*) 
fn.this_ptr;
-               IF_VERBOSE_ACTION(log_msg("calling array push, pushing %d 
values onto array\n",fn.nargs));
+               IF_VERBOSE_ACTION(log_msg("calling array push, pushing %d 
values onto back of array\n",fn.nargs));
 
                for (int i=0;i<fn.nargs;i++)
                        array->elements.push_back(fn.arg(i));
@@ -117,7 +117,19 @@
                fn.result->set_undefined();
        }
 
-       // Callback to pop a value from an array
+       // Callback to push values to the front of an array
+       void array_unshift(const fn_call& fn)
+       {
+               as_array_object* array = (as_array_object*) (as_object*) 
fn.this_ptr;
+               IF_VERBOSE_ACTION(log_msg("calling array unshift, pushing %d 
values onto front of array\n",fn.nargs));
+
+               for (int i=fn.nargs-1;i>=0;i--)
+                       array->elements.push_front(fn.arg(i));
+
+               fn.result->set_undefined();
+       }
+
+       // Callback to pop a value from the back of an array
        void array_pop(const fn_call& fn)
        {
                as_array_object* array = (as_array_object*) (as_object*) 
fn.this_ptr;
@@ -125,7 +137,7 @@
                // If the array is empty, report an error and return undefined!
                if (array->elements.size() <= 0)
                {
-                       IF_VERBOSE_ACTION(log_error("tried to pop element from 
empty array!\n"));
+                       IF_VERBOSE_ACTION(log_error("tried to pop element from 
back of empty array!\n"));
                        fn.result->set_undefined();
                        return;
                }
@@ -136,6 +148,25 @@
                IF_VERBOSE_ACTION(log_msg("calling array pop, result:%s, new 
array size:%d\n",fn.result->to_string(),array->elements.size()));
        }
 
+       // Callback to pop a value from the front of an array
+       void array_shift(const fn_call& fn)
+       {
+               as_array_object* array = (as_array_object*) (as_object*) 
fn.this_ptr;
+
+               // If the array is empty, report an error and return undefined!
+               if (array->elements.size() <= 0)
+               {
+                       IF_VERBOSE_ACTION(log_error("tried to shift element 
from front of empty array!\n"));
+                       fn.result->set_undefined();
+                       return;
+               }
+
+               // Get our index, log, then return result
+               (*fn.result) = array->elements[0];
+               array->elements.pop_front();
+               IF_VERBOSE_ACTION(log_msg("calling array shift, result:%s, new 
array size:%d\n",fn.result->to_string(),array->elements.size()));
+       }
+
        // Unimplemented callback to convert array to a string
        void array_to_string(const fn_call& fn)
        {
@@ -150,9 +181,9 @@
                array->set_member("concat", &array_not_impl);
                array->set_member("slice", &array_not_impl);
                array->set_member("push", &array_push);
-               array->set_member("unshift", &array_not_impl);
+               array->set_member("unshift", &array_unshift);
                array->set_member("pop", &array_pop);
-               array->set_member("shift", &array_not_impl);
+               array->set_member("shift", &array_shift);
                array->set_member("splice", &array_not_impl);
                array->set_member("sort", &array_not_impl);
                array->set_member("sortOn", &array_not_impl);
Index: gnash/server/array.h
diff -u gnash/server/array.h:1.1 gnash/server/array.h:1.2
--- gnash/server/array.h:1.1    Mon Jan 23 16:04:19 2006
+++ gnash/server/array.h        Tue Jan 24 06:03:59 2006
@@ -20,7 +20,7 @@
 #define GNASH_ARRAY_H
 
 #include "action.h"
-#include <vector>
+#include <deque>
 
 namespace gnash {
 
@@ -30,7 +30,7 @@
 
        struct as_array_object : public as_object
        {
-               std::vector<as_value> elements;
+               std::deque<as_value> elements;
                as_array_object();
 
                const int size() const;




reply via email to

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