← Index
NYTProf Performance Profile   « line view »
For svc/members/upsert
  Run on Tue Jan 13 11:50:22 2015
Reported on Tue Jan 13 12:09:47 2015

Filename/usr/share/perl5/Class/Singleton.pm
StatementsExecuted 19 statements in 279µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
21115µs18µsClass::Singleton::::instanceClass::Singleton::instance
11112µs24µsClass::Singleton::::BEGIN@19Class::Singleton::BEGIN@19
1119µs14µsClass::Singleton::::BEGIN@20Class::Singleton::BEGIN@20
1116µs15µsClass::Singleton::::BEGIN@73Class::Singleton::BEGIN@73
1116µs15µsClass::Singleton::::BEGIN@56Class::Singleton::BEGIN@56
0000s0sClass::Singleton::::_new_instanceClass::Singleton::_new_instance
0000s0sClass::Singleton::::has_instanceClass::Singleton::has_instance
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1#============================================================================
2#
3# Class::Singleton.pm
4#
5# Implementation of a "singleton" module which ensures that a class has
6# only one instance and provides global access to it. For a description
7# of the Singleton class, see "Design Patterns", Gamma et al, Addison-
8# Wesley, 1995, ISBN 0-201-63361-2
9#
10# Written by Andy Wardley <abw@wardley.org>
11#
12# Copyright (C) 1998-2008 Andy Wardley. All Rights Reserved.
13# Copyright (C) 1998 Canon Research Centre Europe Ltd.
14#
15#============================================================================
16
17package Class::Singleton;
1819µsrequire 5.004;
19224µs236µs
# spent 24µs (12+12) within Class::Singleton::BEGIN@19 which was called: # once (12µs+12µs) by parent::import at line 19
use strict;
# spent 24µs making 1 call to Class::Singleton::BEGIN@19 # spent 12µs making 1 call to strict::import
20265µs219µs
# spent 14µs (9+5) within Class::Singleton::BEGIN@20 which was called: # once (9µs+5µs) by parent::import at line 20
use warnings;
# spent 14µs making 1 call to Class::Singleton::BEGIN@20 # spent 5µs making 1 call to warnings::import
21
221200nsour $VERSION = 1.4;
23
24
25#========================================================================
26#
27# instance()
28#
29# Module constructor. Creates an Class::Singleton (or derived) instance
30# if one doesn't already exist. The instance reference is stored in the
31# _instance variable of the $class package. This means that classes
32# derived from Class::Singleton will have the variables defined in *THEIR*
33# package, rather than the Class::Singleton package. The impact of this is
34# that you can create any number of classes derived from Class::Singleton
35# and create a single instance of each one. If the _instance variable
36# was stored in the Class::Singleton package, you could only instantiate
37# *ONE* object of *ANY* class derived from Class::Singleton. The first
38# time the instance is created, the _new_instance() constructor is called
39# which simply returns a reference to a blessed hash. This can be
40# overloaded for custom constructors. Any addtional parameters passed to
41# instance() are forwarded to _new_instance().
42#
43# Returns a reference to the existing, or a newly created Class::Singleton
44# object. If the _new_instance() method returns an undefined value
45# then the constructer is deemed to have failed.
46#
47#========================================================================
48
49
# spent 18µs (15+4) within Class::Singleton::instance which was called 2 times, avg 9µs/call: # 2 times (15µs+4µs) by DateTime::TimeZone::new at line 48 of DateTime/TimeZone.pm, avg 9µs/call
sub instance {
5021µs my $class = shift;
51
52 # already got an object
532800ns return $class if ref $class;
54
55 # we store the instance in the _instance variable in the $class package.
56277µs224µs
# spent 15µs (6+9) within Class::Singleton::BEGIN@56 which was called: # once (6µs+9µs) by parent::import at line 56
no strict 'refs';
# spent 15µs making 1 call to Class::Singleton::BEGIN@56 # spent 9µs making 1 call to strict::unimport
5725µs my $instance = \${ "$class\::_instance" };
5828µs14µs defined $$instance
# spent 4µs making 1 call to DateTime::TimeZone::Floating::_new_instance
59 ? $$instance
60 : ($$instance = $class->_new_instance(@_));
61}
62
63
64#=======================================================================
65# has_instance()
66#
67# Public method to return the current instance if it exists.
68#=======================================================================
69
70sub has_instance {
71 my $class = shift;
72 $class = ref $class || $class;
73287µs224µs
# spent 15µs (6+9) within Class::Singleton::BEGIN@73 which was called: # once (6µs+9µs) by parent::import at line 73
no strict 'refs';
# spent 15µs making 1 call to Class::Singleton::BEGIN@73 # spent 9µs making 1 call to strict::unimport
74 return ${"$class\::_instance"};
75}
76
77
78#========================================================================
79# _new_instance(...)
80#
81# Simple constructor which returns a hash reference blessed into the
82# current class. May be overloaded to create non-hash objects or
83# handle any specific initialisation required.
84#========================================================================
85
86sub _new_instance {
87 my $class = shift;
88 my %args = @_ && ref $_[0] eq 'HASH' ? %{ $_[0] } : @_;
89 bless { %args }, $class;
90}
91
- -
9413µs1;
95
96__END__