xref: /aosp_15_r20/external/protobuf/php/ext/google/protobuf/array.h (revision 1b3f573f81763fcece89efc2b6a5209149e44ab8)
1*1b3f573fSAndroid Build Coastguard Worker // Protocol Buffers - Google's data interchange format
2*1b3f573fSAndroid Build Coastguard Worker // Copyright 2008 Google Inc.  All rights reserved.
3*1b3f573fSAndroid Build Coastguard Worker // https://developers.google.com/protocol-buffers/
4*1b3f573fSAndroid Build Coastguard Worker //
5*1b3f573fSAndroid Build Coastguard Worker // Redistribution and use in source and binary forms, with or without
6*1b3f573fSAndroid Build Coastguard Worker // modification, are permitted provided that the following conditions are
7*1b3f573fSAndroid Build Coastguard Worker // met:
8*1b3f573fSAndroid Build Coastguard Worker //
9*1b3f573fSAndroid Build Coastguard Worker //     * Redistributions of source code must retain the above copyright
10*1b3f573fSAndroid Build Coastguard Worker // notice, this list of conditions and the following disclaimer.
11*1b3f573fSAndroid Build Coastguard Worker //     * Redistributions in binary form must reproduce the above
12*1b3f573fSAndroid Build Coastguard Worker // copyright notice, this list of conditions and the following disclaimer
13*1b3f573fSAndroid Build Coastguard Worker // in the documentation and/or other materials provided with the
14*1b3f573fSAndroid Build Coastguard Worker // distribution.
15*1b3f573fSAndroid Build Coastguard Worker //     * Neither the name of Google Inc. nor the names of its
16*1b3f573fSAndroid Build Coastguard Worker // contributors may be used to endorse or promote products derived from
17*1b3f573fSAndroid Build Coastguard Worker // this software without specific prior written permission.
18*1b3f573fSAndroid Build Coastguard Worker //
19*1b3f573fSAndroid Build Coastguard Worker // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20*1b3f573fSAndroid Build Coastguard Worker // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21*1b3f573fSAndroid Build Coastguard Worker // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22*1b3f573fSAndroid Build Coastguard Worker // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23*1b3f573fSAndroid Build Coastguard Worker // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24*1b3f573fSAndroid Build Coastguard Worker // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25*1b3f573fSAndroid Build Coastguard Worker // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26*1b3f573fSAndroid Build Coastguard Worker // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27*1b3f573fSAndroid Build Coastguard Worker // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28*1b3f573fSAndroid Build Coastguard Worker // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29*1b3f573fSAndroid Build Coastguard Worker // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30*1b3f573fSAndroid Build Coastguard Worker 
31*1b3f573fSAndroid Build Coastguard Worker #ifndef PHP_PROTOBUF_ARRAY_H_
32*1b3f573fSAndroid Build Coastguard Worker #define PHP_PROTOBUF_ARRAY_H_
33*1b3f573fSAndroid Build Coastguard Worker 
34*1b3f573fSAndroid Build Coastguard Worker #include <php.h>
35*1b3f573fSAndroid Build Coastguard Worker 
36*1b3f573fSAndroid Build Coastguard Worker #include "def.h"
37*1b3f573fSAndroid Build Coastguard Worker #include "php-upb.h"
38*1b3f573fSAndroid Build Coastguard Worker 
39*1b3f573fSAndroid Build Coastguard Worker // Registers PHP classes for RepeatedField.
40*1b3f573fSAndroid Build Coastguard Worker void Array_ModuleInit();
41*1b3f573fSAndroid Build Coastguard Worker 
42*1b3f573fSAndroid Build Coastguard Worker // Gets a upb_Array* for the PHP object |val|:
43*1b3f573fSAndroid Build Coastguard Worker //  * If |val| is a RepeatedField object, we first check its type and verify
44*1b3f573fSAndroid Build Coastguard Worker //    that that the elements have the correct type for |type|. If so, we return
45*1b3f573fSAndroid Build Coastguard Worker //    the wrapped upb_Array*. We also make sure that this array's arena is fused
46*1b3f573fSAndroid Build Coastguard Worker //    to |arena|, so the returned upb_Array is guaranteed to live as long as
47*1b3f573fSAndroid Build Coastguard Worker //    |arena|.
48*1b3f573fSAndroid Build Coastguard Worker //  * If |val| is a PHP Array, we attempt to create a new upb_Array using
49*1b3f573fSAndroid Build Coastguard Worker //    |arena| and add all of the PHP elements to it.
50*1b3f573fSAndroid Build Coastguard Worker //
51*1b3f573fSAndroid Build Coastguard Worker // If an error occurs, we raise a PHP error and return NULL.
52*1b3f573fSAndroid Build Coastguard Worker upb_Array *RepeatedField_GetUpbArray(zval *val, TypeInfo type,
53*1b3f573fSAndroid Build Coastguard Worker                                      upb_Arena *arena);
54*1b3f573fSAndroid Build Coastguard Worker 
55*1b3f573fSAndroid Build Coastguard Worker // Creates a PHP RepeatedField object for the given upb_Array* and |type| and
56*1b3f573fSAndroid Build Coastguard Worker // returns it in |val|. The PHP object will keep a reference to this |arena| to
57*1b3f573fSAndroid Build Coastguard Worker // ensure the underlying array data stays alive.
58*1b3f573fSAndroid Build Coastguard Worker //
59*1b3f573fSAndroid Build Coastguard Worker // If |arr| is NULL, this will return a PHP null object.
60*1b3f573fSAndroid Build Coastguard Worker void RepeatedField_GetPhpWrapper(zval *val, upb_Array *arr, TypeInfo type,
61*1b3f573fSAndroid Build Coastguard Worker                                  zval *arena);
62*1b3f573fSAndroid Build Coastguard Worker 
63*1b3f573fSAndroid Build Coastguard Worker // Returns true if the given arrays are equal. Both arrays must be of this
64*1b3f573fSAndroid Build Coastguard Worker // |type| and, if the type is |kUpb_CType_Message|, must have the same |m|.
65*1b3f573fSAndroid Build Coastguard Worker bool ArrayEq(const upb_Array *a1, const upb_Array *a2, TypeInfo type);
66*1b3f573fSAndroid Build Coastguard Worker 
67*1b3f573fSAndroid Build Coastguard Worker #endif  // PHP_PROTOBUF_ARRAY_H_
68