Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(50)

Side by Side Diff: base/memory/singleton_objc.h

Issue 6714032: Move some files in base to base/memory. (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: only base Created 9 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2008 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Support for using the Singleton<T> pattern with Objective-C objects. A 5 // Support for using the Singleton<T> pattern with Objective-C objects. A
6 // SingletonObjC is the same as a Singleton, except the default traits are 6 // SingletonObjC is the same as a Singleton, except the default traits are
7 // appropriate for Objective-C objects. A typical Objective-C object of type 7 // appropriate for Objective-C objects. A typical Objective-C object of type
8 // NSExampleType can be maintained as a singleton and accessed with: 8 // NSExampleType can be maintained as a singleton and accessed with:
9 // 9 //
10 // NSExampleType* exampleSingleton = SingletonObjC<NSExampleType>::get(); 10 // NSExampleType* exampleSingleton = SingletonObjC<NSExampleType>::get();
11 // 11 //
12 // The first time this is used, it will create exampleSingleton as the result 12 // The first time this is used, it will create exampleSingleton as the result
13 // of [[NSExampleType alloc] init]. Subsequent calls will return the same 13 // of [[NSExampleType alloc] init]. Subsequent calls will return the same
14 // NSExampleType* object. The object will be released by calling 14 // NSExampleType* object. The object will be released by calling
15 // -[NSExampleType release] when Singleton's atexit routines run 15 // -[NSExampleType release] when Singleton's atexit routines run
16 // (see singleton.h). 16 // (see singleton.h).
17 // 17 //
18 // For Objective-C objects initialized through means other than the 18 // For Objective-C objects initialized through means other than the
19 // no-parameter -init selector, DefaultSingletonObjCTraits may be extended 19 // no-parameter -init selector, DefaultSingletonObjCTraits may be extended
20 // as needed: 20 // as needed:
21 // 21 //
22 // struct FooSingletonTraits : public DefaultSingletonObjCTraits<Foo> { 22 // struct FooSingletonTraits : public DefaultSingletonObjCTraits<Foo> {
23 // static Foo* New() { 23 // static Foo* New() {
24 // return [[Foo alloc] initWithName:@"selecty"]; 24 // return [[Foo alloc] initWithName:@"selecty"];
25 // } 25 // }
26 // }; 26 // };
27 // ... 27 // ...
28 // Foo* widgetSingleton = SingletonObjC<Foo, FooSingletonTraits>::get(); 28 // Foo* widgetSingleton = SingletonObjC<Foo, FooSingletonTraits>::get();
29 29
30 #ifndef BASE_SINGLETON_OBJC_H_ 30 #ifndef BASE_MEMORY_SINGLETON_OBJC_H_
31 #define BASE_SINGLETON_OBJC_H_ 31 #define BASE_MEMORY_SINGLETON_OBJC_H_
32 #pragma once 32 #pragma once
33 33
34 #import <Foundation/Foundation.h> 34 #import <Foundation/Foundation.h>
35 #include "base/singleton.h" 35 #include "base/memory/singleton.h"
36 36
37 // Singleton traits usable to manage traditional Objective-C objects, which 37 // Singleton traits usable to manage traditional Objective-C objects, which
38 // are instantiated by sending |alloc| and |init| messages, and are deallocated 38 // are instantiated by sending |alloc| and |init| messages, and are deallocated
39 // in a memory-managed environment when their retain counts drop to 0 by 39 // in a memory-managed environment when their retain counts drop to 0 by
40 // sending |release| messages. 40 // sending |release| messages.
41 template<typename Type> 41 template<typename Type>
42 struct DefaultSingletonObjCTraits : public DefaultSingletonTraits<Type> { 42 struct DefaultSingletonObjCTraits : public DefaultSingletonTraits<Type> {
43 static Type* New() { 43 static Type* New() {
44 return [[Type alloc] init]; 44 return [[Type alloc] init];
45 } 45 }
46 46
47 static void Delete(Type* object) { 47 static void Delete(Type* object) {
48 [object release]; 48 [object release];
49 } 49 }
50 }; 50 };
51 51
52 // Exactly like Singleton, but without the DefaultSingletonObjCTraits as the 52 // Exactly like Singleton, but without the DefaultSingletonObjCTraits as the
53 // default trait class. This makes it straightforward for Objective-C++ code 53 // default trait class. This makes it straightforward for Objective-C++ code
54 // to hold Objective-C objects as singletons. 54 // to hold Objective-C objects as singletons.
55 template<typename Type, 55 template<typename Type,
56 typename Traits = DefaultSingletonObjCTraits<Type>, 56 typename Traits = DefaultSingletonObjCTraits<Type>,
57 typename DifferentiatingType = Type> 57 typename DifferentiatingType = Type>
58 class SingletonObjC : public Singleton<Type, Traits, DifferentiatingType> { 58 class SingletonObjC : public Singleton<Type, Traits, DifferentiatingType> {
59 }; 59 };
60 60
61 #endif // BASE_SINGLETON_OBJC_H_ 61 #endif // BASE_MEMORY_SINGLETON_OBJC_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698