1ffe3c632Sopenharmony_ci<?php 2ffe3c632Sopenharmony_ci 3ffe3c632Sopenharmony_ci// Protocol Buffers - Google's data interchange format 4ffe3c632Sopenharmony_ci// Copyright 2008 Google Inc. All rights reserved. 5ffe3c632Sopenharmony_ci// https://developers.google.com/protocol-buffers/ 6ffe3c632Sopenharmony_ci// 7ffe3c632Sopenharmony_ci// Redistribution and use in source and binary forms, with or without 8ffe3c632Sopenharmony_ci// modification, are permitted provided that the following conditions are 9ffe3c632Sopenharmony_ci// met: 10ffe3c632Sopenharmony_ci// 11ffe3c632Sopenharmony_ci// * Redistributions of source code must retain the above copyright 12ffe3c632Sopenharmony_ci// notice, this list of conditions and the following disclaimer. 13ffe3c632Sopenharmony_ci// * Redistributions in binary form must reproduce the above 14ffe3c632Sopenharmony_ci// copyright notice, this list of conditions and the following disclaimer 15ffe3c632Sopenharmony_ci// in the documentation and/or other materials provided with the 16ffe3c632Sopenharmony_ci// distribution. 17ffe3c632Sopenharmony_ci// * Neither the name of Google Inc. nor the names of its 18ffe3c632Sopenharmony_ci// contributors may be used to endorse or promote products derived from 19ffe3c632Sopenharmony_ci// this software without specific prior written permission. 20ffe3c632Sopenharmony_ci// 21ffe3c632Sopenharmony_ci// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 22ffe3c632Sopenharmony_ci// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 23ffe3c632Sopenharmony_ci// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 24ffe3c632Sopenharmony_ci// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 25ffe3c632Sopenharmony_ci// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 26ffe3c632Sopenharmony_ci// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 27ffe3c632Sopenharmony_ci// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 28ffe3c632Sopenharmony_ci// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 29ffe3c632Sopenharmony_ci// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 30ffe3c632Sopenharmony_ci// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 31ffe3c632Sopenharmony_ci// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32ffe3c632Sopenharmony_ci 33ffe3c632Sopenharmony_ci/** 34ffe3c632Sopenharmony_ci * MapField and MapFieldIter are used by generated protocol message classes to 35ffe3c632Sopenharmony_ci * manipulate map fields. 36ffe3c632Sopenharmony_ci */ 37ffe3c632Sopenharmony_ci 38ffe3c632Sopenharmony_cinamespace Google\Protobuf\Internal; 39ffe3c632Sopenharmony_ci 40ffe3c632Sopenharmony_ci/** 41ffe3c632Sopenharmony_ci * MapFieldIter is used to iterate MapField. It is also need for the foreach 42ffe3c632Sopenharmony_ci * syntax. 43ffe3c632Sopenharmony_ci */ 44ffe3c632Sopenharmony_ciclass MapFieldIter implements \Iterator 45ffe3c632Sopenharmony_ci{ 46ffe3c632Sopenharmony_ci 47ffe3c632Sopenharmony_ci /** 48ffe3c632Sopenharmony_ci * @ignore 49ffe3c632Sopenharmony_ci */ 50ffe3c632Sopenharmony_ci private $container; 51ffe3c632Sopenharmony_ci 52ffe3c632Sopenharmony_ci /** 53ffe3c632Sopenharmony_ci * Create iterator instance for MapField. 54ffe3c632Sopenharmony_ci * 55ffe3c632Sopenharmony_ci * @param MapField The MapField instance for which this iterator is 56ffe3c632Sopenharmony_ci * created. 57ffe3c632Sopenharmony_ci * @param GPBType Map key type. 58ffe3c632Sopenharmony_ci * @ignore 59ffe3c632Sopenharmony_ci */ 60ffe3c632Sopenharmony_ci public function __construct($container, $key_type) 61ffe3c632Sopenharmony_ci { 62ffe3c632Sopenharmony_ci $this->container = $container; 63ffe3c632Sopenharmony_ci $this->key_type = $key_type; 64ffe3c632Sopenharmony_ci } 65ffe3c632Sopenharmony_ci 66ffe3c632Sopenharmony_ci /** 67ffe3c632Sopenharmony_ci * Reset the status of the iterator 68ffe3c632Sopenharmony_ci * 69ffe3c632Sopenharmony_ci * @return void 70ffe3c632Sopenharmony_ci */ 71ffe3c632Sopenharmony_ci public function rewind() 72ffe3c632Sopenharmony_ci { 73ffe3c632Sopenharmony_ci return reset($this->container); 74ffe3c632Sopenharmony_ci } 75ffe3c632Sopenharmony_ci 76ffe3c632Sopenharmony_ci /** 77ffe3c632Sopenharmony_ci * Return the element at the current position. 78ffe3c632Sopenharmony_ci * 79ffe3c632Sopenharmony_ci * @return object The element at the current position. 80ffe3c632Sopenharmony_ci */ 81ffe3c632Sopenharmony_ci public function current() 82ffe3c632Sopenharmony_ci { 83ffe3c632Sopenharmony_ci return current($this->container); 84ffe3c632Sopenharmony_ci } 85ffe3c632Sopenharmony_ci 86ffe3c632Sopenharmony_ci /** 87ffe3c632Sopenharmony_ci * Return the current key. 88ffe3c632Sopenharmony_ci * 89ffe3c632Sopenharmony_ci * @return object The current key. 90ffe3c632Sopenharmony_ci */ 91ffe3c632Sopenharmony_ci public function key() 92ffe3c632Sopenharmony_ci { 93ffe3c632Sopenharmony_ci $key = key($this->container); 94ffe3c632Sopenharmony_ci switch ($this->key_type) { 95ffe3c632Sopenharmony_ci case GPBType::INT64: 96ffe3c632Sopenharmony_ci case GPBType::UINT64: 97ffe3c632Sopenharmony_ci case GPBType::FIXED64: 98ffe3c632Sopenharmony_ci case GPBType::SFIXED64: 99ffe3c632Sopenharmony_ci case GPBType::SINT64: 100ffe3c632Sopenharmony_ci if (PHP_INT_SIZE === 8) { 101ffe3c632Sopenharmony_ci return $key; 102ffe3c632Sopenharmony_ci } 103ffe3c632Sopenharmony_ci // Intentionally fall through 104ffe3c632Sopenharmony_ci case GPBType::STRING: 105ffe3c632Sopenharmony_ci // PHP associative array stores int string as int for key. 106ffe3c632Sopenharmony_ci return strval($key); 107ffe3c632Sopenharmony_ci case GPBType::BOOL: 108ffe3c632Sopenharmony_ci // PHP associative array stores bool as integer for key. 109ffe3c632Sopenharmony_ci return boolval($key); 110ffe3c632Sopenharmony_ci default: 111ffe3c632Sopenharmony_ci return $key; 112ffe3c632Sopenharmony_ci } 113ffe3c632Sopenharmony_ci } 114ffe3c632Sopenharmony_ci 115ffe3c632Sopenharmony_ci /** 116ffe3c632Sopenharmony_ci * Move to the next position. 117ffe3c632Sopenharmony_ci * 118ffe3c632Sopenharmony_ci * @return void 119ffe3c632Sopenharmony_ci */ 120ffe3c632Sopenharmony_ci public function next() 121ffe3c632Sopenharmony_ci { 122ffe3c632Sopenharmony_ci return next($this->container); 123ffe3c632Sopenharmony_ci } 124ffe3c632Sopenharmony_ci 125ffe3c632Sopenharmony_ci /** 126ffe3c632Sopenharmony_ci * Check whether there are more elements to iterate. 127ffe3c632Sopenharmony_ci * 128ffe3c632Sopenharmony_ci * @return bool True if there are more elements to iterate. 129ffe3c632Sopenharmony_ci */ 130ffe3c632Sopenharmony_ci public function valid() 131ffe3c632Sopenharmony_ci { 132ffe3c632Sopenharmony_ci return key($this->container) !== null; 133ffe3c632Sopenharmony_ci } 134ffe3c632Sopenharmony_ci} 135