From bcbf441e09fb502cf64924ff2530fa144bdf52c5 Mon Sep 17 00:00:00 2001 From: Andreas Brachold Date: Mon, 13 Aug 2007 18:41:27 +0000 Subject: * Move files to trunk --- lib/Class/MakeMethods/Emulator/AccessorFast.pm | 102 +++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 lib/Class/MakeMethods/Emulator/AccessorFast.pm (limited to 'lib/Class/MakeMethods/Emulator/AccessorFast.pm') diff --git a/lib/Class/MakeMethods/Emulator/AccessorFast.pm b/lib/Class/MakeMethods/Emulator/AccessorFast.pm new file mode 100644 index 0000000..0f47e04 --- /dev/null +++ b/lib/Class/MakeMethods/Emulator/AccessorFast.pm @@ -0,0 +1,102 @@ +package Class::MakeMethods::Emulator::AccessorFast; + +use strict; +use Class::MakeMethods::Composite::Hash; +use Class::MakeMethods::Emulator '-isasubclass'; + +sub _emulator_target { 'Class::Accessor::Fast' } + +sub import { + my $class = shift; + $class->_handle_namespace( $class->_emulator_target, $_[0] ) and shift; +} + +######################################################################## + +sub mk_accessors { + Class::MakeMethods::Composite::Hash->make( + -TargetClass => (shift), + 'new' => { name => 'new', modifier => 'with_values' }, + 'scalar' => [ map { + $_, + "_${_}_accessor", { 'hash_key' => $_ } + } @_ ], + ); +} + +sub mk_ro_accessors { + Class::MakeMethods::Composite::Hash->make( + -TargetClass => (shift), + 'new' => { name => 'new', modifier => 'with_values' }, + 'scalar' => [ map { + $_, { permit => 'ro' }, + "_${_}_accessor", { 'hash_key' => $_, permit => 'ro' } + } @_ ], + ); +} + +sub mk_wo_accessors { + Class::MakeMethods::Composite::Hash->make( + -TargetClass => (shift), + 'new' => { name => 'new', modifier => 'with_values' }, + 'scalar' => [ map { + $_, { permit => 'wo' }, + "_${_}_accessor", { 'hash_key' => $_, permit => 'wo' } + } @_ ], + ); +} + +######################################################################## + +1; + +__END__ + + +=head1 NAME + +Class::MakeMethods::Emulator::AccessorFast - Emulate Class::Accessor::Fast + + +=head1 SYNOPSIS + + package Foo; + + use base qw(Class::MakeMethods::Emulator::AccessorFast); + Foo->mk_accessors(qw(this that whatever)); + + # Meanwhile, in a nearby piece of code! + # Emulator::AccessorFast provides new(). + my $foo = Foo->new; + + my $whatever = $foo->whatever; # gets $foo->{whatever} + $foo->this('likmi'); # sets $foo->{this} = 'likmi' + + +=head1 DESCRIPTION + +This module emulates the functionality of Class::Accessor::Fast, using Class::MakeMethods to generate similar methods. + +You may use it directly, as shown in the SYNOPSIS above, + +Furthermore, you may call C to alias the Class::Accessor::Fast namespace +to this package, and subsequent calls to the original package will +be transparently handled by this emulator. To remove the emulation +aliasing, call C. + +B This affects B subsequent uses of Class::Accessor::Fast +in your program, including those in other modules, and might cause +unexpected effects. + + +=head1 SEE ALSO + +See L for general information about this distribution. + +See L for more about this family of subclasses. + +See L for documentation of the original module. + +=cut -- cgit v1.2.3