python_descriptor.h revision 5821806d5e7f356e8fa4b058a389a808ea183019
190b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis// Protocol Buffers - Google's data interchange format
290b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis// Copyright 2008 Google Inc.  All rights reserved.
3dd41c14bfd7686b556de2acf6952e21a4f80b7aaArgyrios Kyrtzidis// http://code.google.com/p/protobuf/
45a7b9c552c446d568e32a55f57e2b10ef00215ecArgyrios Kyrtzidis//
55a7b9c552c446d568e32a55f57e2b10ef00215ecArgyrios Kyrtzidis// Redistribution and use in source and binary forms, with or without
65a7b9c552c446d568e32a55f57e2b10ef00215ecArgyrios Kyrtzidis// modification, are permitted provided that the following conditions are
790b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis// met:
85a7b9c552c446d568e32a55f57e2b10ef00215ecArgyrios Kyrtzidis//
9dd41c14bfd7686b556de2acf6952e21a4f80b7aaArgyrios Kyrtzidis//     * Redistributions of source code must retain the above copyright
10dd41c14bfd7686b556de2acf6952e21a4f80b7aaArgyrios Kyrtzidis// notice, this list of conditions and the following disclaimer.
11dd41c14bfd7686b556de2acf6952e21a4f80b7aaArgyrios Kyrtzidis//     * Redistributions in binary form must reproduce the above
12dd41c14bfd7686b556de2acf6952e21a4f80b7aaArgyrios Kyrtzidis// copyright notice, this list of conditions and the following disclaimer
13dd41c14bfd7686b556de2acf6952e21a4f80b7aaArgyrios Kyrtzidis// in the documentation and/or other materials provided with the
14dd41c14bfd7686b556de2acf6952e21a4f80b7aaArgyrios Kyrtzidis// distribution.
15dd41c14bfd7686b556de2acf6952e21a4f80b7aaArgyrios Kyrtzidis//     * Neither the name of Google Inc. nor the names of its
16dd41c14bfd7686b556de2acf6952e21a4f80b7aaArgyrios Kyrtzidis// contributors may be used to endorse or promote products derived from
17dd41c14bfd7686b556de2acf6952e21a4f80b7aaArgyrios Kyrtzidis// this software without specific prior written permission.
18dd41c14bfd7686b556de2acf6952e21a4f80b7aaArgyrios Kyrtzidis//
19dd41c14bfd7686b556de2acf6952e21a4f80b7aaArgyrios Kyrtzidis// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
2090b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21f511ba6277d240bbee1064715da8362a6edee5f3Argyrios Kyrtzidis// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
2217cfdeda476aa8899f0ccedd9cb9cdb76e89b6b4Argyrios Kyrtzidis// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
2317cfdeda476aa8899f0ccedd9cb9cdb76e89b6b4Argyrios Kyrtzidis// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2417cfdeda476aa8899f0ccedd9cb9cdb76e89b6b4Argyrios Kyrtzidis// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25b24e199fbd17af780ab000c5862d191e4daffc0fArgyrios Kyrtzidis// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26f511ba6277d240bbee1064715da8362a6edee5f3Argyrios Kyrtzidis// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27dc767e368471288bef8716d19b0e929647246bfcArgyrios Kyrtzidis// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2817cfdeda476aa8899f0ccedd9cb9cdb76e89b6b4Argyrios Kyrtzidis// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29ae8b17f1d5d303af53db5a4f4a375ea6b9356566Argyrios Kyrtzidis// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30b24e199fbd17af780ab000c5862d191e4daffc0fArgyrios Kyrtzidis
31f511ba6277d240bbee1064715da8362a6edee5f3Argyrios Kyrtzidis// Author: petar@google.com (Petar Petrov)
328dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis
33bd65bb511c26549c96b829c1282e4c877588564aArgyrios Kyrtzidis#ifndef GOOGLE_PROTOBUF_PYTHON_DESCRIPTOR_H__
34bd65bb511c26549c96b829c1282e4c877588564aArgyrios Kyrtzidis#define GOOGLE_PROTOBUF_PYTHON_DESCRIPTOR_H__
35bd65bb511c26549c96b829c1282e4c877588564aArgyrios Kyrtzidis
36bd65bb511c26549c96b829c1282e4c877588564aArgyrios Kyrtzidis#include <Python.h>
37bd65bb511c26549c96b829c1282e4c877588564aArgyrios Kyrtzidis#include <structmember.h>
38bd65bb511c26549c96b829c1282e4c877588564aArgyrios Kyrtzidis
39bd65bb511c26549c96b829c1282e4c877588564aArgyrios Kyrtzidis#include <google/protobuf/descriptor.h>
40bd65bb511c26549c96b829c1282e4c877588564aArgyrios Kyrtzidis
41bd65bb511c26549c96b829c1282e4c877588564aArgyrios Kyrtzidis#if PY_VERSION_HEX < 0x02050000 && !defined(PY_SSIZE_T_MIN)
42bd65bb511c26549c96b829c1282e4c877588564aArgyrios Kyrtzidistypedef int Py_ssize_t;
438dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis#define PY_SSIZE_T_MAX INT_MAX
448dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis#define PY_SSIZE_T_MIN INT_MIN
458dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis#endif
468dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis
478dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidisnamespace google {
488dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidisnamespace protobuf {
498dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidisnamespace python {
50a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis
518dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidistypedef struct {
52a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis  PyObject_HEAD
53a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis
54a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis  // The proto2 descriptor that this object represents.
558dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis  const google::protobuf::FieldDescriptor* descriptor;
568dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis
578dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis  // Full name of the field (PyString).
588dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis  PyObject* full_name;
5912dffcddb60380c5bed4f085a1f51534afda3b87Argyrios Kyrtzidis
608dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis  // Name of the field (PyString).
618dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis  PyObject* name;
628f4eae96bef0902d93535c18b69154ce66f5e546Argyrios Kyrtzidis
638f4eae96bef0902d93535c18b69154ce66f5e546Argyrios Kyrtzidis  // C++ type of the field (PyLong).
648f4eae96bef0902d93535c18b69154ce66f5e546Argyrios Kyrtzidis  PyObject* cpp_type;
658f4eae96bef0902d93535c18b69154ce66f5e546Argyrios Kyrtzidis
668f4eae96bef0902d93535c18b69154ce66f5e546Argyrios Kyrtzidis  // Name of the field (PyLong).
678f4eae96bef0902d93535c18b69154ce66f5e546Argyrios Kyrtzidis  PyObject* label;
688f4eae96bef0902d93535c18b69154ce66f5e546Argyrios Kyrtzidis
698f4eae96bef0902d93535c18b69154ce66f5e546Argyrios Kyrtzidis  // Identity of the descriptor (PyLong used as a poiner).
708f4eae96bef0902d93535c18b69154ce66f5e546Argyrios Kyrtzidis  PyObject* id;
718f4eae96bef0902d93535c18b69154ce66f5e546Argyrios Kyrtzidis} CFieldDescriptor;
725a7b9c552c446d568e32a55f57e2b10ef00215ecArgyrios Kyrtzidis
735a7b9c552c446d568e32a55f57e2b10ef00215ecArgyrios Kyrtzidisextern PyTypeObject CFieldDescriptor_Type;
745a7b9c552c446d568e32a55f57e2b10ef00215ecArgyrios Kyrtzidis
755a7b9c552c446d568e32a55f57e2b10ef00215ecArgyrios Kyrtzidisextern PyTypeObject CDescriptorPool_Type;
765a7b9c552c446d568e32a55f57e2b10ef00215ecArgyrios Kyrtzidis
775a7b9c552c446d568e32a55f57e2b10ef00215ecArgyrios Kyrtzidis
785a7b9c552c446d568e32a55f57e2b10ef00215ecArgyrios KyrtzidisPyObject* Python_NewCDescriptorPool(PyObject* ignored, PyObject* args);
795a7b9c552c446d568e32a55f57e2b10ef00215ecArgyrios KyrtzidisPyObject* Python_BuildFile(PyObject* ignored, PyObject* args);
805a7b9c552c446d568e32a55f57e2b10ef00215ecArgyrios Kyrtzidisbool InitDescriptor();
815a7b9c552c446d568e32a55f57e2b10ef00215ecArgyrios Kyrtzidisgoogle::protobuf::DescriptorPool* GetDescriptorPool();
825a7b9c552c446d568e32a55f57e2b10ef00215ecArgyrios Kyrtzidis
835a7b9c552c446d568e32a55f57e2b10ef00215ecArgyrios Kyrtzidis}  // namespace python
845a7b9c552c446d568e32a55f57e2b10ef00215ecArgyrios Kyrtzidis}  // namespace protobuf
855a7b9c552c446d568e32a55f57e2b10ef00215ecArgyrios Kyrtzidis
865a7b9c552c446d568e32a55f57e2b10ef00215ecArgyrios Kyrtzidis}  // namespace google
875a7b9c552c446d568e32a55f57e2b10ef00215ecArgyrios Kyrtzidis#endif  // GOOGLE_PROTOBUF_PYTHON_DESCRIPTOR_H__
885a7b9c552c446d568e32a55f57e2b10ef00215ecArgyrios Kyrtzidis