1 // 2 // Copyright (C) 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 20 #ifndef GNASH_CLASS_HIERARCHY_H 21 #define GNASH_CLASS_HIERARCHY_H 22 23 #ifdef HAVE_CONFIG_H 24 #include "gnashconfig.h" 25 #endif 26 27 #include <string> 28 #include <vector> 29 30 #include "ObjectURI.h" 31 32 namespace gnash { 33 class Extension; 34 class as_object; 35 } 36 37 namespace gnash { 38 39 /// Register all of the ActionScript classes, with their dependencies. 40 class ClassHierarchy 41 { 42 public: 43 struct ExtensionClass 44 { 45 /// The filename for the library relative to the plugins directory. 46 std::string file_name; 47 48 /// Initialization function name 49 /// 50 /// The name of the function which will yield the prototype 51 /// object. It should be a function with signature: 52 /// void init_name(as_object &obj); 53 /// which sets its prototype as the member 'name' in the 54 /// object. See extensions/mysql/mysql_db.cpp function 55 /// mysql_class_init 56 std::string init_name; 57 58 const ObjectURI uri; 59 60 /// The version at which this should be added. 61 int version; 62 }; 63 64 struct NativeClass 65 { 66 67 /// The type of function to use for initialization 68 typedef void (*InitFunc)(as_object& obj, const ObjectURI& uri); 69 NativeClassNativeClass70 NativeClass(InitFunc init, ObjectURI u, int ver) 71 : 72 initializer(init), 73 uri(std::move(u)), 74 version(ver) 75 {} 76 77 /// The initialization function 78 /// 79 /// See ExtensionClass.init_name for the necessary function. 80 InitFunc initializer; 81 82 /// The name of the class. 83 const ObjectURI uri; 84 85 /// The version at which this should be visible. 86 int version; 87 }; 88 89 /// \brief 90 /// Construct the declaration object. Later set the global and 91 /// extension objects using setGlobal and setExtension ClassHierarchy(as_object * global)92 ClassHierarchy(as_object* global) 93 : 94 mGlobal(global) 95 {} 96 97 /// \brief 98 /// Delete our private namespaces. 99 ~ClassHierarchy(); 100 101 typedef std::vector<NativeClass> NativeClasses; 102 103 /// Declare an ActionScript class and how to instantiate it from the core. 104 /// 105 /// @param c 106 /// The NativeClass structure which defines the class. 107 /// 108 /// @return true, unless the class with c.name already existed. 109 bool declareClass(const NativeClass& c); 110 111 /// Declare a list of native classes. 112 void declareAll(const NativeClasses& classes); 113 114 /// Mark objects for garbage collector. markReachableResources()115 void markReachableResources() const {} 116 117 private: 118 as_object* mGlobal; 119 }; 120 121 } 122 #endif 123 124