[ 
https://issues.apache.org/jira/browse/TS-4295?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15219248#comment-15219248
 ] 

ASF GitHub Bot commented on TS-4295:
------------------------------------

Github user masaori335 commented on a diff in the pull request:

    https://github.com/apache/trafficserver/pull/537#discussion_r57996067
  
    --- Diff: lib/ts/PriorityQueue.h ---
    @@ -0,0 +1,191 @@
    +/** @file
    +
    +  Priority Queue Implimentation using Min Heap.
    +
    +  @section license License
    +
    +  Licensed to the Apache Software Foundation (ASF) under one
    +  or more contributor license agreements.  See the NOTICE file
    +  distributed with this work for additional information
    +  regarding copyright ownership.  The ASF licenses this file
    +  to you under the Apache License, Version 2.0 (the
    +  "License"); you may not use this file except in compliance
    +  with the License.  You may obtain a copy of the License at
    +
    +      http://www.apache.org/licenses/LICENSE-2.0
    +
    +  Unless required by applicable law or agreed to in writing, software
    +  distributed under the License is distributed on an "AS IS" BASIS,
    +  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +  See the License for the specific language governing permissions and
    +  limitations under the License.
    + */
    +
    +#ifndef __PRIORITY_QUEUE_H__
    +#define __PRIORITY_QUEUE_H__
    +
    +#include "ts/Diags.h"
    +#include "ts/Vec.h"
    +
    +template <typename T> struct PriorityQueueEntry {
    +  PriorityQueueEntry(T n) : index(0), node(n) {}
    +
    +  uint32_t index;
    +  T node;
    +};
    +
    +template <typename T> class PriorityQueue
    +{
    +public:
    +  PriorityQueue() {}
    +  ~PriorityQueue() {}
    +
    +  const bool empty();
    +  PriorityQueueEntry<T> *top();
    +  void pop();
    +  void push(PriorityQueueEntry<T> *);
    +  void update(PriorityQueueEntry<T> *, bool);
    +  const Vec<PriorityQueueEntry<T> *> &dump() const;
    +
    +private:
    +  Vec<PriorityQueueEntry<T> *> _v;
    +
    +  void _swap(uint32_t, uint32_t);
    +  void _bubble_up(uint32_t);
    +  void _bubble_down(uint32_t);
    +};
    +
    +template <typename T>
    +const Vec<PriorityQueueEntry<T> *> &
    +PriorityQueue<T>::dump() const
    +{
    +  return _v;
    +}
    +
    +template <typename T>
    +const bool
    +PriorityQueue<T>::empty()
    +{
    +  return _v.length() == 0;
    +}
    +
    +template <typename T>
    +void
    +PriorityQueue<T>::push(PriorityQueueEntry<T> *entry)
    +{
    +  ink_release_assert(entry != NULL);
    +
    +  int len = _v.length();
    +  _v.push_back(entry);
    +  entry->index = len;
    +
    +  _bubble_up(len);
    +}
    +
    +template <typename T>
    +PriorityQueueEntry<T> *
    +PriorityQueue<T>::top()
    +{
    +  if (empty()) {
    +    return NULL;
    +  } else {
    +    return _v[0];
    +  }
    +}
    +
    +template <typename T>
    +void
    +PriorityQueue<T>::pop()
    +{
    +  if (empty()) {
    +    return;
    +  }
    +
    +  _v[0] = _v[_v.length() - 1];
    +  _v.pop();
    +  _bubble_down(0);
    +}
    +
    +template <typename T>
    +void
    +PriorityQueue<T>::update(PriorityQueueEntry<T> *entry, bool increased = 
true)
    +{
    +  ink_release_assert(entry != NULL);
    +
    +  if (empty()) {
    +    return;
    +  }
    +
    +  if (increased) {
    --- End diff --
    
    Ah, if both of them are called, one of them works and other does nothing.


> Add Priority Queue in lib/ts/
> -----------------------------
>
>                 Key: TS-4295
>                 URL: https://issues.apache.org/jira/browse/TS-4295
>             Project: Traffic Server
>          Issue Type: Improvement
>            Reporter: Masaori Koshiba
>            Assignee: Masaori Koshiba
>             Fix For: 6.2.0
>
>
> TS-3535 needs Priority Queue using Binary Heap.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to