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