LCOV - code coverage report
Current view: top level - gfx/sfntly/cpp/src/sfntly/port - java_iterator.h (source / functions) Hit Total Coverage
Test: output.info Lines: 0 16 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 48 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*
       2             :  * Copyright 2011 Google Inc. All Rights Reserved.
       3             :  *
       4             :  * Licensed under the Apache License, Version 2.0 (the "License");
       5             :  * you may not use this file except in compliance with the License.
       6             :  * You may obtain a copy of the License at
       7             :  *
       8             :  *      http://www.apache.org/licenses/LICENSE-2.0
       9             :  *
      10             :  * Unless required by applicable law or agreed to in writing, software
      11             :  * distributed under the License is distributed on an "AS IS" BASIS,
      12             :  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      13             :  * See the License for the specific language governing permissions and
      14             :  * limitations under the License.
      15             :  */
      16             : 
      17             : #ifndef SFNTLY_CPP_SRC_SFNTLY_PORT_JAVA_ITERATOR_H_
      18             : #define SFNTLY_CPP_SRC_SFNTLY_PORT_JAVA_ITERATOR_H_
      19             : 
      20             : #include "sfntly/port/refcount.h"
      21             : 
      22             : // Interface of Java iterator.
      23             : // This is a forward read-only iterator that represents java.util.Iterator<E>
      24             : 
      25             : namespace sfntly {
      26             : 
      27             : template <typename ReturnType, typename ContainerBase>
      28             : class Iterator : public virtual RefCount {
      29             :  public:
      30           0 :   virtual ~Iterator() {}
      31             :   virtual ContainerBase* container_base() = 0;
      32             : 
      33             :  protected:
      34           0 :   Iterator() {}
      35             :   NO_COPY_AND_ASSIGN(Iterator);
      36             : };
      37             : 
      38             : template <typename ReturnType, typename Container,
      39             :           typename ContainerBase = Container>
      40             : class PODIterator : public Iterator<ReturnType, ContainerBase>,
      41             :                     public RefCounted< PODIterator<ReturnType, Container> > {
      42             :  public:
      43           0 :   explicit PODIterator(Container* container) : container_(container) {}
      44           0 :   virtual ~PODIterator() {}
      45           0 :   virtual ContainerBase* container_base() {
      46           0 :     return static_cast<ContainerBase*>(container_);
      47             :   }
      48             : 
      49             :   virtual bool HasNext() = 0;
      50             :   virtual ReturnType Next() = 0;
      51           0 :   virtual void Remove() {
      52             : #if !defined (SFNTLY_NO_EXCEPTION)
      53             :     // Default to no support.
      54             :     throw UnsupportedOperationException();
      55             : #endif
      56           0 :   }
      57             : 
      58             :  protected:
      59           0 :   Container* container() { return container_; }
      60             : 
      61             :  private:
      62             :   Container* container_;  // Dumb pointer is used to avoid circular ref-counting
      63             : };
      64             : 
      65             : template <typename ReturnType, typename Container,
      66             :           typename ContainerBase = Container>
      67             : class RefIterator : public Iterator<ReturnType, ContainerBase>,
      68             :                     public RefCounted< RefIterator<ReturnType, Container> > {
      69             :  public:
      70           0 :   explicit RefIterator(Container* container) : container_(container) {}
      71           0 :   virtual ~RefIterator() {}
      72           0 :   virtual ContainerBase* container_base() {
      73           0 :     return static_cast<ContainerBase*>(container_);
      74             :   }
      75             : 
      76             :   virtual bool HasNext() = 0;
      77             :   CALLER_ATTACH virtual ReturnType* Next() = 0;
      78           0 :   virtual void Remove() {
      79             : #if !defined (SFNTLY_NO_EXCEPTION)
      80             :     // Default to no support.
      81             :     throw UnsupportedOperationException();
      82             : #endif
      83           0 :   }
      84             : 
      85             :  protected:
      86           0 :   Container* container() { return container_; }
      87             : 
      88             :  private:
      89             :   Container* container_;  // Dumb pointer is used to avoid circular ref-counting
      90             : };
      91             : 
      92             : }  // namespace sfntly
      93             : 
      94             : #endif  // SFNTLY_CPP_SRC_SFNTLY_PORT_JAVA_ITERATOR_H_

Generated by: LCOV version 1.13