Go to the documentation of this file.
50 #if PY_MAJOR_VERSION >= 3
51 #if PY_VERSION_HEX < 0x03030000
52 #error "Python 3.0 - 3.2 are not supported."
54 #define PyString_AsStringAndSize(ob, charpp, sizep) \
55 (PyUnicode_Check(ob) ? ((*(charpp) = const_cast<char*>( \
56 PyUnicode_AsUTF8AndSize(ob, (sizep)))) == NULL \
59 : PyBytes_AsStringAndSize(ob, (charpp), (sizep)))
66 namespace extension_dict {
70 std::vector<const FieldDescriptor*>
fields;
71 self->parent->message->GetReflection()->ListFields(*
self->parent->message,
74 for (
size_t i = 0;
i <
fields.size(); ++
i) {
75 if (
fields[
i]->is_extension()) {
83 fields[
i]->message_type()) ==
nullptr) {
96 std::vector<const FieldDescriptor*>
fields;
106 if (
obj ==
nullptr) {
107 return PyErr_Format(PyExc_MemoryError,
108 "Could not allocate extension iterator");
117 self->parent->message->GetReflection()->ListFields(*
self->parent->message,
123 return obj.release();
129 Py_XDECREF(
self->extension_dict);
130 self->~ExtensionIterator();
131 Py_TYPE(_self)->tp_free(_self);
148 CMessage::CompositeFieldsMap::iterator iterator =
149 self->parent->composite_fields->find(
descriptor);
150 if (iterator !=
self->parent->composite_fields->end()) {
151 Py_INCREF(iterator->second);
152 return iterator->second->AsPyObject();
160 if (sub_message ==
NULL) {
163 (*
self->parent->composite_fields)[
descriptor] = sub_message;
189 if (py_container ==
NULL) {
192 (*
self->parent->composite_fields)[
descriptor] = py_container;
197 if (py_container ==
NULL) {
200 (*
self->parent->composite_fields)[
descriptor] = py_container;
204 PyErr_SetString(PyExc_ValueError,
"control reached unexpected line");
219 PyErr_SetString(PyExc_TypeError,
"Extension is repeated and/or composite "
232 Py_ssize_t name_size;
233 if (PyString_AsStringAndSize(arg, &
name, &name_size) < 0) {
239 pool->pool->FindExtensionByName(
string(
name, name_size));
240 if (message_extension ==
NULL) {
242 const Descriptor* message_descriptor =
pool->pool->FindMessageTypeByName(
243 string(
name, name_size));
254 if (message_extension ==
NULL) {
263 if (
number == -1 && PyErr_Occurred()) {
269 self->parent->message->GetDescriptor(),
number);
270 if (message_extension ==
NULL) {
281 if (field_descriptor ==
nullptr) {
286 PyErr_Format(PyExc_KeyError,
"%s is not an extension",
314 self->parent = parent;
320 Py_CLEAR(
self->parent);
321 Py_TYPE(
self)->tp_free(
reinterpret_cast<PyObject*
>(
self));
326 if (opid != Py_EQ && opid != Py_NE) {
327 Py_INCREF(Py_NotImplemented);
328 return Py_NotImplemented;
332 equals =
self->parent ==
reinterpret_cast<ExtensionDict*
>(other)->parent;;
334 if (equals ^ (opid == Py_EQ)) {
357 #define EDMETHOD(name, args, doc) { #name, (PyCFunction)name, args, doc }
361 "Finds an extension by field number."),
381 PyObject_HashNotImplemented,
409 Py_ssize_t total_size =
self->
fields.size();
410 Py_ssize_t
index =
self->index;
411 while (
self->index < total_size) {
414 if (
self->fields[
index]->is_extension()) {
419 if (
self->fields[
index]->message_type() !=
nullptr &&
422 self->fields[
index]->message_type()) ==
nullptr) {
455 "A scalar map iterator",
PyObject * GetIter(PyObject *_self)
const FieldDescriptor * GetExtensionDescriptor(PyObject *extension)
void dealloc(PyObject *pself)
GLuint const GLchar * name
const EnumDescriptor * type() const
const EnumValueOptions & options() const
PyObject * subscript(ExtensionDict *self, PyObject *key)
const Descriptor::ReservedRange const EnumValueDescriptor const MethodDescriptor extension
bool is_extension() const
const std::string & full_name() const
std::vector< const FieldDescriptor * > fields
static Py_ssize_t len(ExtensionDict *self)
PHP_PROTO_OBJECT_FREE_END PHP_PROTO_OBJECT_DTOR_END intern self
PyObject * InternalGetScalar(const Message *message, const FieldDescriptor *field_descriptor)
bool HasField(const Message &message, const FieldDescriptor *field) const
#define EDMETHOD(name, args, doc)
PyObject * PyFieldDescriptor_FromDescriptor(const FieldDescriptor *field_descriptor)
static PyObject * RichCompare(ExtensionDict *self, PyObject *other, int opid)
static PySequenceMethods SeqMethods
zend_class_entry * message_type
GLsizei GLsizei GLuint * obj
PyObject * _FindExtensionByName(ExtensionDict *self, PyObject *arg)
#define PyVarObject_HEAD_INIT(type, size)
PyTypeObject ExtensionIterator_Type
int extension_count() const
ExtensionDict * NewExtensionDict(CMessage *parent)
struct google::protobuf::python::ExtensionDict ExtensionDict
const FieldDescriptor * extension(int index) const
CMessageClass * GetOrCreateMessageClass(PyMessageFactory *self, const Descriptor *descriptor)
int FieldSize(const Message &message, const FieldDescriptor *field) const
const SETUP_TEARDOWN_TESTCONTEXT char * key
static void DeallocExtensionIterator(PyObject *_self)
int AssureWritable(CMessage *self)
InternalDescriptorPool * pool
static const upb_fielddef fields[107]
PyMessageFactory * GetFactoryForMessage(CMessage *message)
bool CheckFieldBelongsToMessage(const FieldDescriptor *field_descriptor, const Message *message)
PyObject * _FindExtensionByNumber(ExtensionDict *self, PyObject *arg)
int InternalSetScalar(CMessage *self, const FieldDescriptor *field_descriptor, PyObject *arg)
static PyMappingMethods MpMethods
PyObject * IterNext(PyObject *_self)
static PyMethodDef Methods[]
static int Contains(PyObject *_self, PyObject *key)
PyTypeObject ExtensionDict_Type
int ass_subscript(ExtensionDict *self, PyObject *key, PyObject *value)
GLsizei const GLfloat * value
ExtensionDict * extension_dict
CMessageClass * GetMessageClass(PyMessageFactory *self, const Descriptor *message_descriptor)
GLenum GLuint GLenum GLsizei const GLchar * message
CMessage * InternalGetSubMessage(CMessage *self, const FieldDescriptor *field_descriptor)
RepeatedCompositeContainer * NewContainer(CMessage *parent, const FieldDescriptor *parent_field_descriptor, CMessageClass *child_message_class)
RepeatedScalarContainer * NewContainer(CMessage *parent, const FieldDescriptor *parent_field_descriptor)
libaditof
Author(s):
autogenerated on Wed May 21 2025 02:06:51