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 * RepeatedField and RepeatedFieldIter are used by generated protocol message 35ffe3c632Sopenharmony_ci * classes to manipulate repeated fields. 36ffe3c632Sopenharmony_ci */ 37ffe3c632Sopenharmony_ci 38ffe3c632Sopenharmony_cinamespace Google\Protobuf\Internal; 39ffe3c632Sopenharmony_ci 40ffe3c632Sopenharmony_ci/** 41ffe3c632Sopenharmony_ci * RepeatedFieldIter is used to iterate RepeatedField. It is also need for the 42ffe3c632Sopenharmony_ci * foreach syntax. 43ffe3c632Sopenharmony_ci */ 44ffe3c632Sopenharmony_ciclass RepeatedFieldIter implements \Iterator 45ffe3c632Sopenharmony_ci{ 46ffe3c632Sopenharmony_ci 47ffe3c632Sopenharmony_ci /** 48ffe3c632Sopenharmony_ci * @ignore 49ffe3c632Sopenharmony_ci */ 50ffe3c632Sopenharmony_ci private $position; 51ffe3c632Sopenharmony_ci /** 52ffe3c632Sopenharmony_ci * @ignore 53ffe3c632Sopenharmony_ci */ 54ffe3c632Sopenharmony_ci private $container; 55ffe3c632Sopenharmony_ci 56ffe3c632Sopenharmony_ci /** 57ffe3c632Sopenharmony_ci * Create iterator instance for RepeatedField. 58ffe3c632Sopenharmony_ci * 59ffe3c632Sopenharmony_ci * @param RepeatedField The RepeatedField instance for which this iterator 60ffe3c632Sopenharmony_ci * is created. 61ffe3c632Sopenharmony_ci * @ignore 62ffe3c632Sopenharmony_ci */ 63ffe3c632Sopenharmony_ci public function __construct($container) 64ffe3c632Sopenharmony_ci { 65ffe3c632Sopenharmony_ci $this->position = 0; 66ffe3c632Sopenharmony_ci $this->container = $container; 67ffe3c632Sopenharmony_ci } 68ffe3c632Sopenharmony_ci 69ffe3c632Sopenharmony_ci /** 70ffe3c632Sopenharmony_ci * Reset the status of the iterator 71ffe3c632Sopenharmony_ci * 72ffe3c632Sopenharmony_ci * @return void 73ffe3c632Sopenharmony_ci */ 74ffe3c632Sopenharmony_ci public function rewind() 75ffe3c632Sopenharmony_ci { 76ffe3c632Sopenharmony_ci $this->position = 0; 77ffe3c632Sopenharmony_ci } 78ffe3c632Sopenharmony_ci 79ffe3c632Sopenharmony_ci /** 80ffe3c632Sopenharmony_ci * Return the element at the current position. 81ffe3c632Sopenharmony_ci * 82ffe3c632Sopenharmony_ci * @return object The element at the current position. 83ffe3c632Sopenharmony_ci */ 84ffe3c632Sopenharmony_ci public function current() 85ffe3c632Sopenharmony_ci { 86ffe3c632Sopenharmony_ci return $this->container[$this->position]; 87ffe3c632Sopenharmony_ci } 88ffe3c632Sopenharmony_ci 89ffe3c632Sopenharmony_ci /** 90ffe3c632Sopenharmony_ci * Return the current position. 91ffe3c632Sopenharmony_ci * 92ffe3c632Sopenharmony_ci * @return integer The current position. 93ffe3c632Sopenharmony_ci */ 94ffe3c632Sopenharmony_ci public function key() 95ffe3c632Sopenharmony_ci { 96ffe3c632Sopenharmony_ci return $this->position; 97ffe3c632Sopenharmony_ci } 98ffe3c632Sopenharmony_ci 99ffe3c632Sopenharmony_ci /** 100ffe3c632Sopenharmony_ci * Move to the next position. 101ffe3c632Sopenharmony_ci * 102ffe3c632Sopenharmony_ci * @return void 103ffe3c632Sopenharmony_ci */ 104ffe3c632Sopenharmony_ci public function next() 105ffe3c632Sopenharmony_ci { 106ffe3c632Sopenharmony_ci ++$this->position; 107ffe3c632Sopenharmony_ci } 108ffe3c632Sopenharmony_ci 109ffe3c632Sopenharmony_ci /** 110ffe3c632Sopenharmony_ci * Check whether there are more elements to iterate. 111ffe3c632Sopenharmony_ci * 112ffe3c632Sopenharmony_ci * @return bool True if there are more elements to iterate. 113ffe3c632Sopenharmony_ci */ 114ffe3c632Sopenharmony_ci public function valid() 115ffe3c632Sopenharmony_ci { 116ffe3c632Sopenharmony_ci return isset($this->container[$this->position]); 117ffe3c632Sopenharmony_ci } 118ffe3c632Sopenharmony_ci} 119