Gnash  0.8.11dev
Array_as.h
Go to the documentation of this file.
1 //
2 // Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
3 // Free Software Foundation, Inc
4 //
5 // This program is free software; you can redistribute it and/or modify
6 // it under the terms of the GNU General Public License as published by
7 // the Free Software Foundation; either version 3 of the License, or
8 // (at your option) any later version.
9 //
10 // This program is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU General Public License for more details.
14 //
15 // You should have received a copy of the GNU General Public License
16 // along with this program; if not, write to the Free Software
17 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18 
19 #ifndef GNASH_ARRAY_H
20 #define GNASH_ARRAY_H
21 
22 #include "as_object.h"
23 
24 // Forward declarations
25 namespace gnash {
26  class as_value;
27 }
28 
29 namespace gnash {
30 
32 //
35 //
39 size_t arrayLength(as_object& array);
40 
42 //
45 //
48 ObjectURI arrayKey(VM& vm, size_t i);
49 
51 //
55 {
56 public:
57  IsStrictArray(VM& st) : _strict(true), _st(st) {}
58  virtual bool accept(const ObjectURI& uri, const as_value& val);
59 
60  bool strict() const {
61  return _strict;
62  }
63 private:
64  bool _strict;
65  VM& _st;
66 };
67 
68 
70 //
74 void checkArrayLength(as_object& array, const ObjectURI& uri,
75  const as_value& val);
76 
77 template<typename T>
78 void foreachArray(as_object& array, T& pred)
79 {
80  size_t size = arrayLength(array);
81  if (!size) return;
82 
83  VM& vm = getVM(array);
84 
85  for (size_t i = 0; i < static_cast<size_t>(size); ++i) {
86  pred(getOwnProperty(array, arrayKey(vm, i)));
87  }
88 }
89 
91 void array_class_init(as_object& global, const ObjectURI& uri);
92 
93 void registerArrayNative(as_object& global);
94 
95 }
96 
97 #endif
ActionScript value type.
Definition: as_value.h:94
virtual bool accept(const ObjectURI &uri, const as_value &val)
This function should return false if no further visits are needed.
Definition: Array_as.cpp:911
uri
Definition: test.py:12
A visitor to check whether an array is strict or not.
Definition: Array_as.h:54
Anonymous namespace for callbacks, local functions, event handlers etc.
Definition: dbus_ext.cpp:40
The base class for all ActionScript objects.
Definition: as_object.h:161
as_value getOwnProperty(as_object &o, const ObjectURI &uri)
Get an own member of an object.
Definition: as_object.h:777
A URI for describing as_objects.
Definition: ObjectURI.h:44
VM & getVM(const as_environment &env)
Definition: as_environment.h:222
An abstract property visitor.
Definition: PropertyList.h:49
ObjectURI arrayKey(VM &vm, size_t i)
Convert an integral value into an ObjectURI.
Definition: Array_as.cpp:995
void registerArrayNative(as_object &global)
Definition: Array_as.cpp:954
The AVM1 virtual machine.
Definition: VM.h:71
Definition: GnashKey.h:132
void array_class_init(as_object &where, const ObjectURI &uri)
Initialize the global.Array object.
Definition: Array_as.cpp:973
Definition: GnashKey.h:155
size_t arrayLength(as_object &array)
Get the length of an object as though it were an array.
Definition: Array_as.cpp:942
IsStrictArray(VM &st)
Definition: Array_as.h:57
void foreachArray(as_object &array, T &pred)
Definition: Array_as.h:78
bool strict() const
Definition: Array_as.h:60
void checkArrayLength(as_object &array, const ObjectURI &uri, const as_value &val)
Genuine arrays handle the length property in a special way.
Definition: Array_as.cpp:920