Skip to content

Commit

Permalink
Add a stub hash proxy builder type. Add preliminary support to the co…
Browse files Browse the repository at this point in the history
…ntroller.
  • Loading branch information
Whiteknight committed Mar 5, 2011
1 parent c331de9 commit dd4f013
Show file tree
Hide file tree
Showing 2 changed files with 104 additions and 0 deletions.
14 changes: 14 additions & 0 deletions src/proxy/Controller.winxed
Expand Up @@ -83,5 +83,19 @@ namespace Rosella { namespace Proxy
}

function set_attribute(var proxy, string name, var value) { }

/* Keyed Access Methods
These methods are called on array- and hash-like keyed vtable
accesses.
*/

function get_keyed(var proxy, string val_type, string key_type, string key)
{
return null;
}

function set_keyed(var proxy, string val_type, string key_type, string key, var value)
{
}
}
}}
90 changes: 90 additions & 0 deletions src/proxy/builder/Hash.winxed
@@ -0,0 +1,90 @@
namespace Rosella { namespace Proxy { namespace Builder
{
class StringKeyedHash : Rosella.Proxy.Builder
{
function setup_proxy_class(var target_class, var proxy_class)
{
using Rosella.Proxy.Builder.Hash.intercept_get_pmc_keyed_str;
using Rosella.Proxy.Builder.Hash.intercept_get_string_keyed_str;
using Rosella.Proxy.Builder.Hash.intercept_get_integer_keyed_str;
using Rosella.Proxy.Builder.Hash.intercept_set_pmc_keyed_str;
using Rosella.Proxy.Builder.Hash.intercept_set_string_keyed_str;
using Rosella.Proxy.Builder.Hash.intercept_set_integer_keyed_str;

// TODO: delete_*_keyed_str
// TODO: exists_*_keyed_str
// TODO: Any of a million other keyed_str vtables. Nobody ever
// said this would be cheap

proxy_class.add_vtable_override("get_pmc_keyed_str", intercept_get_pmc_keyed_str);
proxy_class.add_vtable_override("get_string_keyed_str", intercept_get_string_keyed_str);
proxy_class.add_vtable_override("get_integer_keyed_str", intercept_get_integer_keyed_str);
proxy_class.add_vtable_override("set_pmc_keyed_str", intercept_set_pmc_keyed_str);
proxy_class.add_vtable_override("set_string_keyed_str", intercept_set_string_keyed_str);
proxy_class.add_vtable_override("set_integer_keyed_str", intercept_set_integer_keyed_str);
}

function get_pmc_keyed_str(string key)
{
using Rosella.Proxy.get_proxy_private_attr;
var controller = get_proxy_private_attr(self, "proxy_controller");
if (controller != null)
return controller.get_keyed(self, "pmc", "string", name);
return null;
}

function get_string_keyed_str(string key)
{
using Rosella.Proxy.get_proxy_private_attr;
var controller = get_proxy_private_attr(self, "proxy_controller");
if (controller != null)
return controller.get_keyed(self, "string", "string", name);
return null;
}

function get_integer_keyed_str(string key)
{
using Rosella.Proxy.get_proxy_private_attr;
var controller = get_proxy_private_attr(self, "proxy_controller");
if (controller != null)
return controller.get_keyed(self, "integer", "string", name);
return null;
}

function set_pmc_keyed_str(string key, var value)
{
using Rosella.Proxy.get_proxy_private_attr;
var controller = get_proxy_private_attr(self, "proxy_controller");
if (controller != null)
controller.set_keyed(self, "pmc", "string", name, value);
}

function set_string_keyed_str(string key, var value)
{
using Rosella.Proxy.get_proxy_private_attr;
var controller = get_proxy_private_attr(self, "proxy_controller");
if (controller != null)
controller.set_keyed(self, "string", "string", name, value);
}

function set_integer_keyed_str(string key, var value)
{
using Rosella.Proxy.get_proxy_private_attr;
var controller = get_proxy_private_attr(self, "proxy_controller");
if (controller != null)
controller.set_keyed(self, "integer", "string", name, value);
}
}

class PMCKeyedHash : Rosella.Proxy.Builder
{
//function setup_proxy_class(var target_class, var proxy_class)
//{
// using Rosella.Proxy.Builder.Hash.intercept_get_pmc_keyed;
// using Rosella.Proxy.Builder.Hash.intercept_get_string_keyed;
// using Rosella.Proxy.Builder.Hash.intercept_get_integer_keyed;
// using Rosella.Proxy.Builder.Hash.intercept_set_pmc_keyed;
// using Rosella.Proxy.Builder.Hash.intercept_set_string_keyed;
// using Rosella.Proxy.Builder.Hash.intercept_set_integer_keyed;
}
}

0 comments on commit dd4f013

Please sign in to comment.