src/hotspot/share/jfr/utilities/jfrIterator.hpp
branchJEP-349-branch
changeset 57360 5d043a159d5c
parent 53244 9807daeb47c4
child 57870 00860d9caf4d
equal deleted inserted replaced
57359:4cab5edc2950 57360:5d043a159d5c
    35 template <typename Node>
    35 template <typename Node>
    36 class StopOnNullCondition : public AllStatic {
    36 class StopOnNullCondition : public AllStatic {
    37  public:
    37  public:
    38   static bool has_next(const Node* node) {
    38   static bool has_next(const Node* node) {
    39     return node != NULL;
    39     return node != NULL;
       
    40   }
       
    41 };
       
    42 
       
    43 template <typename Node>
       
    44 class StopOnEmptyCondition : public AllStatic {
       
    45 public:
       
    46   static bool has_next(const Node* node) {
       
    47     return node != NULL && !node->empty();
    40   }
    48   }
    41 };
    49 };
    42 
    50 
    43 template <typename List, template <typename> class ContinuationPredicate>
    51 template <typename List, template <typename> class ContinuationPredicate>
    44 class Navigator {
    52 class Navigator {
    81 class NavigatorStopOnNull : public Navigator<List, StopOnNullCondition> {
    89 class NavigatorStopOnNull : public Navigator<List, StopOnNullCondition> {
    82  public:
    90  public:
    83   NavigatorStopOnNull(List& list, jfr_iter_direction direction = forward) : Navigator<List, StopOnNullCondition>(list, direction) {}
    91   NavigatorStopOnNull(List& list, jfr_iter_direction direction = forward) : Navigator<List, StopOnNullCondition>(list, direction) {}
    84 };
    92 };
    85 
    93 
       
    94 template <typename List>
       
    95 class NavigatorStopOnEmpty : public Navigator<List, StopOnEmptyCondition> {
       
    96 public:
       
    97   NavigatorStopOnEmpty(List& list, jfr_iter_direction direction = forward) : Navigator<List, StopOnEmptyCondition>(list, direction) {}
       
    98 };
       
    99 
    86 template<typename List, template <typename> class Navigator, typename AP = StackObj>
   100 template<typename List, template <typename> class Navigator, typename AP = StackObj>
    87 class IteratorHost : public AP {
   101 class IteratorHost : public AP {
    88  private:
   102  private:
    89   Navigator<List> _navigator;
   103   Navigator<List> _navigator;
    90 
   104 
   102 class StopOnNullIterator : public IteratorHost<List, NavigatorStopOnNull, AP> {
   116 class StopOnNullIterator : public IteratorHost<List, NavigatorStopOnNull, AP> {
   103  public:
   117  public:
   104   StopOnNullIterator(List& list, jfr_iter_direction direction = forward) : IteratorHost<List, NavigatorStopOnNull, AP>(list, direction) {}
   118   StopOnNullIterator(List& list, jfr_iter_direction direction = forward) : IteratorHost<List, NavigatorStopOnNull, AP>(list, direction) {}
   105 };
   119 };
   106 
   120 
       
   121 template<typename List, typename AP = StackObj>
       
   122 class StopOnEmptyIterator : public IteratorHost<List, NavigatorStopOnEmpty, AP> {
       
   123 public:
       
   124   StopOnEmptyIterator(List& list, jfr_iter_direction direction = forward) : IteratorHost<List, NavigatorStopOnEmpty, AP>(list, direction) {}
       
   125 };
       
   126 
   107 #endif // SHARE_JFR_UTILITIES_JFRITERATOR_HPP
   127 #endif // SHARE_JFR_UTILITIES_JFRITERATOR_HPP