1
// Protocol Buffers - Google's data interchange format
2
// Copyright 2008 Google Inc. All rights reserved.
3
// http://code.google.com/p/protobuf/
5
// Redistribution and use in source and binary forms, with or without
6
// modification, are permitted provided that the following conditions are
9
// * Redistributions of source code must retain the above copyright
10
// notice, this list of conditions and the following disclaimer.
11
// * Redistributions in binary form must reproduce the above
12
// copyright notice, this list of conditions and the following disclaimer
13
// in the documentation and/or other materials provided with the
15
// * Neither the name of Google Inc. nor the names of its
16
// contributors may be used to endorse or promote products derived from
17
// this software without specific prior written permission.
19
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
// Author: anuraag@google.com (Anuraag Agrawal)
32
// Author: tibell@google.com (Johan Tibell)
34
#ifndef GOOGLE_PROTOBUF_PYTHON_CPP_REPEATED_SCALAR_CONTAINER_H__
35
#define GOOGLE_PROTOBUF_PYTHON_CPP_REPEATED_SCALAR_CONTAINER_H__
41
#include <google/protobuf/stubs/shared_ptr.h>
50
using internal::shared_ptr;
54
struct CFieldDescriptor;
57
typedef struct RepeatedScalarContainer {
60
// This is the top-level C++ Message object that owns the whole
61
// proto tree. Every Python RepeatedScalarContainer holds a
62
// reference to it in order to keep it alive as long as there's a
63
// Python object that references any part of the tree.
64
shared_ptr<Message> owner;
66
// Pointer to the C++ Message that contains this container. The
67
// RepeatedScalarContainer does not own this pointer.
70
// Weak reference to a parent CMessage object (i.e. may be NULL.)
72
// Used to make sure all ancestors are also mutable when first
73
// modifying the container.
76
// Weak reference to the parent's descriptor that describes this
77
// field. Used together with the parent's message when making a
78
// default message instance mutable.
79
CFieldDescriptor* parent_field;
80
} RepeatedScalarContainer;
82
extern PyTypeObject RepeatedScalarContainer_Type;
84
namespace repeated_scalar_container {
86
// Appends the scalar 'item' to the end of the container 'self'.
88
// Returns None if successful; returns NULL and sets an exception if
90
PyObject* Append(RepeatedScalarContainer* self, PyObject* item);
92
// Releases the messages in the container to a new message.
94
// Returns 0 on success, -1 on failure.
95
int Release(RepeatedScalarContainer* self);
97
// Appends all the elements in the input iterator to the container.
99
// Returns None if successful; returns NULL and sets an exception if
101
PyObject* Extend(RepeatedScalarContainer* self, PyObject* value);
103
// Set the owner field of self and any children of self.
104
void SetOwner(RepeatedScalarContainer* self,
105
const shared_ptr<Message>& new_owner);
107
} // namespace repeated_scalar_container
108
} // namespace python
109
} // namespace protobuf
111
} // namespace google
112
#endif // GOOGLE_PROTOBUF_PYTHON_CPP_REPEATED_SCALAR_CONTAINER_H__