priority_queue_cxx 0.3.2 → 0.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c2b5bbef541a1b74a11e959cda5b1b11020bda89
4
- data.tar.gz: 15d62c6289e5d07cacafba804497305b6719c532
3
+ metadata.gz: e986c8e1ee2ffadf9ee65bbc906fe3fe980aff79
4
+ data.tar.gz: 21d4f3c327dbd7c1fe059dc119d6847871259ae4
5
5
  SHA512:
6
- metadata.gz: 7f14a5601f02ab38049968a222dd01d9403755984f0b91f6365b881cfe5af229173edf16290aa7568e15a87fd343205d965c9f8f2782cf096aed070cbd3ad934
7
- data.tar.gz: 264b327c4dbc023d21a06868eebe55b76812d6f48b3a9797dd456aeb206766c936fd00ea1d1ae97ac3e58ae70a04a0b891b866ac14da513ae152f52b1ba3015f
6
+ metadata.gz: 0b2a75924e27c81bd72609b98766dcf5da2d41a39c08f8d0ec2e391630bd9e0bd7cf78e5382b38fd00694b2c7162fd8d1da2bb946e0f7d7bdff290fdec23bdd0
7
+ data.tar.gz: 355340dda6b0ebdd4667a9e65db95be6d7b25dd0698e5c57c9f3e5767eff3098e34c08d92bf2439e05e69d051b596a7573302e7aec61fabe8bfaa20862e97404
data/README.md CHANGED
@@ -1,10 +1,10 @@
1
1
  # PriorityQueueCxx
2
2
 
3
- [![Gem Version](https://badge.fury.io/rb/fast_containers.png)](http://badge.fury.io/rb/fast_containers)
3
+ [![Gem Version](https://badge.fury.io/rb/priority_queue_cxx.png)](http://badge.fury.io/rb/priority_queue_cxx)
4
4
 
5
- FastContainers provides a fast implementatin of priority queues for ruby. Speed is achieved by exposing the c++ standard implementation through a light ruby wrapper. As a bigger project, the library may grow a number of containers that are not in the standard ruby library and are presently only available as pure ruby libraries, but presently the library includes a single class named PriorityQueue. More containers will be added as necessity arises. Contributors and feature requests are most welcome.
5
+ *FastContainers* provides a fast implementatin of priority queues for ruby. Speed is achieved by exposing the c++ standard implementation through a light ruby wrapper. As a bigger project, the library may grow to provide a number of containers that are not in the standard ruby library and are presently only available as pure ruby libraries. Presently, however, the library includes a single class named PriorityQueue. More containers will be added as necessity arises. Contributors and feature requests are most welcome.
6
6
 
7
- The library exposes a module named 'FastContainers' (to be required using ```require 'fc'```) which provides the PriorityQueue class.
7
+ The library exposes a module named ```FastContainers``` (to be required using ```require 'fc'```) which provides the PriorityQueue class.
8
8
 
9
9
  ## Installation
10
10
 
@@ -217,7 +217,7 @@ Create a new priority queue and returns it. queue_kind specifies whether to buil
217
217
 
218
218
  Example:
219
219
 
220
- ```ruby
220
+ ```ruby
221
221
  pq = FastContainers::PriorityQueue.new(:min)
222
222
  ```
223
223
 
@@ -291,4 +291,3 @@ The class Includes Enumerable, so that standard enumeration based methods (e.g.,
291
291
  ## Notes
292
292
 
293
293
  <sup id="ref1">1</sup> It is worth mentioning that, due to how priority queue are implemented by the C++ standard library, this implementation can't efficiently support priority changes. In any case, to support this feature would require important changes in the current API.<a href="#which-is-the-best-priority-queue-implementation-for-ruby" title="back reference">&#8617;</a>
294
-
@@ -22,9 +22,9 @@
22
22
  #include <iostream>
23
23
 
24
24
  namespace fc_pq {
25
-
25
+
26
26
  typedef std::pair<void*,double> PQElem;
27
-
27
+
28
28
  class PairsComparator
29
29
  {
30
30
  bool reverse;
@@ -36,54 +36,54 @@ namespace fc_pq {
36
36
  else return (lhs.second<rhs.second);
37
37
  }
38
38
  };
39
-
39
+
40
40
  // --------------------------------------
41
41
  // PQueue
42
42
  // --------------------------------------
43
-
43
+
44
44
  typedef std::vector<PQElem> PQueueStorage;
45
45
  typedef unsigned int PQueueStorageVersion;
46
-
47
- typedef struct _PQueue {
46
+
47
+ typedef struct _PQueue {
48
48
  PQueueStorage storage;
49
49
  PairsComparator comparator;
50
50
  PQueueStorageVersion version;
51
-
51
+
52
52
  _PQueue(PQueueKind kind) : comparator(kind), version(0) { }
53
- }* PQueue;
53
+ }* PQueue;
54
54
 
55
55
  void destroy(PQueue q){
56
56
  delete q;
57
57
  }
58
-
58
+
59
59
  PQueue create(PQueueKind kind) {
60
60
  return new _PQueue(kind);
61
61
  }
62
-
62
+
63
63
  /* Getting the size of the container */
64
64
  unsigned int size(PQueue q) {
65
65
  return q->storage.size();
66
66
  }
67
-
68
-
67
+
68
+
69
69
  void push(PQueue q, void* value, double priority) {
70
70
  q->version++;
71
71
  q->storage.push_back(PQElem(value, priority));
72
72
  push_heap(q->storage.begin(), q->storage.end(), q->comparator);
73
73
  }
74
-
74
+
75
75
  void* top(PQueue q) {
76
76
  return q->storage.at(0).first;
77
77
  }
78
-
78
+
79
79
  double top_key(PQueue q) {
80
80
  return q->storage.at(0).second;
81
81
  }
82
-
82
+
83
83
  double second_best_key(PQueue q) {
84
84
  if(q->storage.size()==2)
85
85
  return q->storage.at(1).second;
86
-
86
+
87
87
  double key1 = q->storage.at(1).second;
88
88
  double key2 = q->storage.at(2).second;
89
89
  if( key1 > key2 ) {
@@ -92,31 +92,31 @@ namespace fc_pq {
92
92
  return key2;
93
93
  }
94
94
  }
95
-
95
+
96
96
  void pop(PQueue q) {
97
97
  q->version++;
98
98
  pop_heap(q->storage.begin(), q->storage.end(), q->comparator);
99
99
  q->storage.pop_back();
100
100
  }
101
-
101
+
102
102
  bool empty(PQueue q) {
103
103
  return q->storage.empty();
104
104
  }
105
-
105
+
106
106
  // --------------------------------------
107
107
  // Iterator
108
108
  // --------------------------------------
109
-
110
-
109
+
110
+
111
111
  typedef struct _PQueueIterator {
112
112
  PQueueStorage::const_iterator iterator;
113
113
  PQueue pqueue;
114
114
  PQueueStorage* storage;
115
115
  PQueueStorageVersion version;
116
-
117
- _PQueueIterator(PQueue q) : iterator(q->storage.begin()), pqueue(q), storage(&q->storage), version(q->version)
116
+
117
+ _PQueueIterator(PQueue q) : iterator(q->storage.begin()), pqueue(q), storage(&q->storage), version(q->version)
118
118
  { }
119
-
119
+
120
120
  void checkVersion() throw(PQueueException) {
121
121
  if(version != pqueue->version) {
122
122
  throw PQueueException("FastContainers::PriorityQueue - a change in the priority queue invalidated the current iterator.");
@@ -124,35 +124,35 @@ namespace fc_pq {
124
124
  }
125
125
  } PQueueImplIterator;
126
126
  #define QIT(it) ((PQueueImplIterator*)(it))
127
-
127
+
128
128
  /* Returns a new iterator object */
129
129
  PQueueIterator iterator(PQueue q) {
130
130
  PQueueImplIterator* it = new PQueueImplIterator(q);
131
131
  return it;
132
132
  }
133
-
133
+
134
134
  void iterator_dispose(PQueueIterator it) {
135
135
  delete it;
136
136
  }
137
-
137
+
138
138
  /* Returns the value of the current element */
139
139
  void* iterator_get_value(PQueueIterator it) {
140
140
  return it->iterator->first;
141
141
  }
142
-
142
+
143
143
  /* Returns the priority of the current element */
144
144
  double iterator_get_key(PQueueIterator it) {
145
145
  return it->iterator->second;
146
146
  }
147
-
147
+
148
148
  /* Moves on to the next element */
149
149
  PQueueIterator iterator_next(PQueueIterator it) throw(PQueueException) {
150
150
  it->checkVersion();
151
151
  it->iterator++;
152
152
  return it;
153
153
  }
154
-
154
+
155
155
  bool iterator_end(PQueueIterator it) {
156
156
  return it->iterator == it->storage->end();
157
157
  }
158
- }
158
+ }
@@ -22,64 +22,63 @@
22
22
  #define FC_QUEUE_H_KTY6FH1S
23
23
 
24
24
  #include <queue>
25
+ #include <stdexcept>
25
26
 
26
27
  namespace fc_pq {
27
28
  class PQueueException : public std::runtime_error {
28
29
  public:
29
30
  PQueueException(const char* msg) : std::runtime_error(msg) {}
30
31
  };
31
-
32
+
32
33
  typedef struct _PQueue* PQueue;
33
34
  typedef struct _PQueueIterator* PQueueIterator;
34
35
  typedef enum { MIN_QUEUE, MAX_QUEUE } PQueueKind;
35
-
36
+
36
37
  /* Constructor. It defaults to construct a max queue. If true is passed
37
- it construct a min queue.*/
38
+ it construct a min queue.*/
38
39
  PQueue create(PQueueKind kind);
39
-
40
+
40
41
  /* Destructor */
41
- void destroy(PQueue q);
42
-
42
+ void destroy(PQueue q);
43
+
43
44
  /* Getting the size of the container */
44
45
  unsigned int size(PQueue q);
45
-
46
+
46
47
  /* Adding elements */
47
48
  void push(PQueue q, void* value, double priority);
48
-
49
+
49
50
  /* Inspecting the queue top (for values) */
50
51
  void* top(PQueue q);
51
-
52
+
52
53
  /* Inspecting the queue top (for priorities) */
53
54
  double top_key(PQueue q);
54
-
55
+
55
56
  /* Returns the priority of the next best element */
56
57
  double second_best_key(PQueue q);
57
-
58
+
58
59
  /* Removing the queue top */
59
60
  void pop(PQueue q);
60
-
61
+
61
62
  /* Returns true if the queue is empty */
62
63
  bool empty(PQueue q);
63
-
64
+
64
65
  /* Returns a new iterator object */
65
66
  PQueueIterator iterator(PQueue q);
66
-
67
+
67
68
  /* Dispose the iterator */
68
69
  void iterator_dispose(PQueueIterator it);
69
-
70
+
70
71
  /* Returns the value of the current element */
71
72
  void* iterator_get_value(PQueueIterator it);
72
-
73
+
73
74
  /* Returns the priority of the current element */
74
75
  double iterator_get_key(PQueueIterator it);
75
-
76
+
76
77
  /* Moves on to the next element */
77
78
  PQueueIterator iterator_next(PQueueIterator it) throw(PQueueException);
78
-
79
+
79
80
  /* Return true if the iterator is already out of the container */
80
81
  bool iterator_end(PQueueIterator it);
81
82
  }
82
83
 
83
84
  #endif /* end of include guard: FC_QUEUE_H_KTY6FH1S */
84
-
85
-
data/lib/fc.rb CHANGED
@@ -21,11 +21,11 @@
21
21
  require 'fast_containers'
22
22
 
23
23
  module FastContainers
24
- VERSION = "0.3.2"
25
-
24
+ VERSION = "0.3.3"
25
+
26
26
  class PriorityQueue
27
27
  include Enumerable
28
-
28
+
29
29
  alias_method :next, :top
30
30
  alias_method :next_key, :top_key
31
31
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: priority_queue_cxx
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Roberto Esposito
@@ -45,7 +45,7 @@ files:
45
45
  - test/performance/test_fc_vs_pqueue.rb
46
46
  - test/performance/test_fc_vs_priority_queue.rb
47
47
  - test/test_fast_containers.rb
48
- homepage: https://github.com/boborbt/fast_containers
48
+ homepage: https://github.com/boborbt/priority_queue_cxx
49
49
  licenses:
50
50
  - MIT
51
51
  metadata: {}