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

Side by Side Diff: third_party/protobuf/python/google/protobuf/pyext/descriptor_pool.h

Issue 2495533002: third_party/protobuf: Update to HEAD (83d681ee2c) (Closed)
Patch Set: Make chrome settings proto generated file a component Created 4 years 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
OLDNEW
1 // Protocol Buffers - Google's data interchange format 1 // Protocol Buffers - Google's data interchange format
2 // Copyright 2008 Google Inc. All rights reserved. 2 // Copyright 2008 Google Inc. All rights reserved.
3 // https://developers.google.com/protocol-buffers/ 3 // https://developers.google.com/protocol-buffers/
4 // 4 //
5 // Redistribution and use in source and binary forms, with or without 5 // Redistribution and use in source and binary forms, with or without
6 // modification, are permitted provided that the following conditions are 6 // modification, are permitted provided that the following conditions are
7 // met: 7 // met:
8 // 8 //
9 // * Redistributions of source code must retain the above copyright 9 // * Redistributions of source code must retain the above copyright
10 // notice, this list of conditions and the following disclaimer. 10 // notice, this list of conditions and the following disclaimer.
(...skipping 20 matching lines...) Expand all
31 #ifndef GOOGLE_PROTOBUF_PYTHON_CPP_DESCRIPTOR_POOL_H__ 31 #ifndef GOOGLE_PROTOBUF_PYTHON_CPP_DESCRIPTOR_POOL_H__
32 #define GOOGLE_PROTOBUF_PYTHON_CPP_DESCRIPTOR_POOL_H__ 32 #define GOOGLE_PROTOBUF_PYTHON_CPP_DESCRIPTOR_POOL_H__
33 33
34 #include <Python.h> 34 #include <Python.h>
35 35
36 #include <google/protobuf/stubs/hash.h> 36 #include <google/protobuf/stubs/hash.h>
37 #include <google/protobuf/descriptor.h> 37 #include <google/protobuf/descriptor.h>
38 38
39 namespace google { 39 namespace google {
40 namespace protobuf { 40 namespace protobuf {
41 class MessageFactory; 41 namespace python {
42 42
43 namespace python { 43 struct PyMessageFactory;
44 44
45 // The (meta) type of all Messages classes. 45 // The (meta) type of all Messages classes.
46 struct CMessageClass; 46 struct CMessageClass;
47 47
48 // Wraps operations to the global DescriptorPool which contains information 48 // Wraps operations to the global DescriptorPool which contains information
49 // about all messages and fields. 49 // about all messages and fields.
50 // 50 //
51 // There is normally one pool per process. We make it a Python object only 51 // There is normally one pool per process. We make it a Python object only
52 // because it contains many Python references. 52 // because it contains many Python references.
53 // TODO(amauryfa): See whether such objects can appear in reference cycles, and 53 // TODO(amauryfa): See whether such objects can appear in reference cycles, and
54 // consider adding support for the cyclic GC. 54 // consider adding support for the cyclic GC.
55 // 55 //
56 // "Methods" that interacts with this DescriptorPool are in the cdescriptor_pool 56 // "Methods" that interacts with this DescriptorPool are in the cdescriptor_pool
57 // namespace. 57 // namespace.
58 typedef struct PyDescriptorPool { 58 typedef struct PyDescriptorPool {
59 PyObject_HEAD 59 PyObject_HEAD
60 60
61 // The C++ pool containing Descriptors. 61 // The C++ pool containing Descriptors.
62 DescriptorPool* pool; 62 DescriptorPool* pool;
63 63
64 // The C++ pool acting as an underlay. Can be NULL. 64 // The C++ pool acting as an underlay. Can be NULL.
65 // This pointer is not owned and must stay alive. 65 // This pointer is not owned and must stay alive.
66 const DescriptorPool* underlay; 66 const DescriptorPool* underlay;
67 67
68 // The C++ descriptor database used to fetch unknown protos. Can be NULL. 68 // The C++ descriptor database used to fetch unknown protos. Can be NULL.
69 // This pointer is owned. 69 // This pointer is owned.
70 const DescriptorDatabase* database; 70 const DescriptorDatabase* database;
71 71
72 // DynamicMessageFactory used to create C++ instances of messages. 72 // The preferred MessageFactory to be used by descriptors.
73 // This object cache the descriptors that were used, so the DescriptorPool 73 // TODO(amauryfa): Don't create the Factory from the DescriptorPool, but
74 // needs to get rid of it before it can delete itself. 74 // use the one passed while creating message classes. And remove this member.
75 // 75 PyMessageFactory* py_message_factory;
76 // Note: A C++ MessageFactory is different from the Python MessageFactory.
77 // The C++ one creates messages, when the Python one creates classes.
78 MessageFactory* message_factory;
79
80 // Make our own mapping to retrieve Python classes from C++ descriptors.
81 //
82 // Descriptor pointers stored here are owned by the DescriptorPool above.
83 // Python references to classes are owned by this PyDescriptorPool.
84 typedef hash_map<const Descriptor*, CMessageClass*> ClassesByMessageMap;
85 ClassesByMessageMap* classes_by_descriptor;
86 76
87 // Cache the options for any kind of descriptor. 77 // Cache the options for any kind of descriptor.
88 // Descriptor pointers are owned by the DescriptorPool above. 78 // Descriptor pointers are owned by the DescriptorPool above.
89 // Python objects are owned by the map. 79 // Python objects are owned by the map.
90 hash_map<const void*, PyObject*>* descriptor_options; 80 hash_map<const void*, PyObject*>* descriptor_options;
91 } PyDescriptorPool; 81 } PyDescriptorPool;
92 82
93 83
94 extern PyTypeObject PyDescriptorPool_Type; 84 extern PyTypeObject PyDescriptorPool_Type;
95 85
96 namespace cdescriptor_pool { 86 namespace cdescriptor_pool {
97 87
98 // Looks up a message by name. 88 // Looks up a message by name.
99 // Returns a message Descriptor, or NULL if not found. 89 // Returns a message Descriptor, or NULL if not found.
100 const Descriptor* FindMessageTypeByName(PyDescriptorPool* self, 90 const Descriptor* FindMessageTypeByName(PyDescriptorPool* self,
101 const string& name); 91 const string& name);
102 92
103 // Registers a new Python class for the given message descriptor.
104 // On error, returns -1 with a Python exception set.
105 int RegisterMessageClass(PyDescriptorPool* self,
106 const Descriptor* message_descriptor,
107 CMessageClass* message_class);
108
109 // Retrieves the Python class registered with the given message descriptor.
110 //
111 // Returns a *borrowed* reference if found, otherwise returns NULL with an
112 // exception set.
113 CMessageClass* GetMessageClass(PyDescriptorPool* self,
114 const Descriptor* message_descriptor);
115
116 // The functions below are also exposed as methods of the DescriptorPool type. 93 // The functions below are also exposed as methods of the DescriptorPool type.
117 94
118 // Looks up a message by name. Returns a PyMessageDescriptor corresponding to 95 // Looks up a message by name. Returns a PyMessageDescriptor corresponding to
119 // the field on success, or NULL on failure. 96 // the field on success, or NULL on failure.
120 // 97 //
121 // Returns a new reference. 98 // Returns a new reference.
122 PyObject* FindMessageByName(PyDescriptorPool* self, PyObject* name); 99 PyObject* FindMessageByName(PyDescriptorPool* self, PyObject* name);
123 100
124 // Looks up a field by name. Returns a PyFieldDescriptor corresponding to 101 // Looks up a field by name. Returns a PyFieldDescriptor corresponding to
125 // the field on success, or NULL on failure. 102 // the field on success, or NULL on failure.
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
158 PyDescriptorPool* GetDescriptorPool_FromPool(const DescriptorPool* pool); 135 PyDescriptorPool* GetDescriptorPool_FromPool(const DescriptorPool* pool);
159 136
160 // Initialize objects used by this module. 137 // Initialize objects used by this module.
161 bool InitDescriptorPool(); 138 bool InitDescriptorPool();
162 139
163 } // namespace python 140 } // namespace python
164 } // namespace protobuf 141 } // namespace protobuf
165 142
166 } // namespace google 143 } // namespace google
167 #endif // GOOGLE_PROTOBUF_PYTHON_CPP_DESCRIPTOR_POOL_H__ 144 #endif // GOOGLE_PROTOBUF_PYTHON_CPP_DESCRIPTOR_POOL_H__
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698