TPIE

11a2c2d
sort_deprecated.h
Go to the documentation of this file.
1 // -*- mode: c++; tab-width: 4; indent-tabs-mode: t; c-file-style: "stroustrup"; -*-
2 // vi:set ts=4 sts=4 sw=4 noet :
3 // Copyright 2008-2012, The TPIE development team
4 //
5 // This file is part of TPIE.
6 //
7 // TPIE is free software: you can redistribute it and/or modify it under
8 // the terms of the GNU Lesser General Public License as published by the
9 // Free Software Foundation, either version 3 of the License, or (at your
10 // option) any later version.
11 //
12 // TPIE is distributed in the hope that it will be useful, but WITHOUT ANY
13 // WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
15 // License for more details.
16 //
17 // You should have received a copy of the GNU Lesser General Public License
18 // along with TPIE. If not, see <http://www.gnu.org/licenses/>
19 
20 #ifndef __TPIE_SORT_DEPRECATED_H__
21 #define __TPIE_SORT_DEPRECATED_H__
22 
66 
67 // Get definitions for working with Unix and Windows
68 #include <tpie/portability.h>
69 
70 // The class that actually does the sorting
71 #include <tpie/sort_manager.h>
72 #include <tpie/mergeheap.h>
73 #include <tpie/internal_sort.h>
74 
77 
78 #include <tpie/sort.h>
79 
80 #include <tpie/comparator.h>
81 
82 namespace tpie {
83 
84  namespace ami {
85  inline err exception_kind(const exception & e) {
86  if (0 != dynamic_cast<const end_of_stream_exception *>(&e)) return END_OF_STREAM;
87  return BTE_ERROR;
88  }
89  }
132 
133  namespace ami {
134 
135  template<class T>
136  err sort(stream<T> *instream_ami, stream<T> *outstream_ami,
137  tpie::progress_indicator_base* indicator=NULL) {
138  try {
139  tpie::sort(instream_ami->underlying_stream(), outstream_ami->underlying_stream(), indicator);
140  } catch (const exception & e) {
141  TP_LOG_FATAL_ID(e.what());
142  return exception_kind(e);
143  }
144  return NO_ERROR;
145  }
146 
147  }
148 
157 
158  namespace ami {
159  template<class T, class CMPR>
160  err sort(stream<T> *instream_ami, stream<T> *outstream_ami,
161  CMPR *cmp, progress_indicator_base* indicator=NULL) {
162  try {
163  TPIE2STL_cmp<T, CMPR> comp(cmp);
164  if (indicator) {
165  tpie::sort(instream_ami->underlying_stream(), outstream_ami->underlying_stream(), comp, *indicator);
166  } else {
167  progress_indicator_null dummy(1);
168  tpie::sort(instream_ami->underlying_stream(), outstream_ami->underlying_stream(), comp, dummy);
169  }
170  } catch (const exception & e) {
171  TP_LOG_FATAL_ID(e.what());
172  return exception_kind(e);
173  }
174  return NO_ERROR;
175  }
176  }
177 
178 // --------------------------------------------------------------------
179 // - -
180 // - These versions used to build a heap on pointers to objects -
181 // - but have been deprecated, since they have been broken for -
182 // - many years and caused unnecessary code duplication. -
183 // - -
184 // --------------------------------------------------------------------
185 
186  namespace ami {
187  template<class T>
188  err ptr_sort(stream<T> *instream_ami, stream<T> *outstream_ami,
189  progress_indicator_base* indicator=NULL) {
190 
191  TP_LOG_WARNING_ID("tpie::ami::ptr_sort is deprecated");
192  return sort(instream_ami, outstream_ami, indicator);
193  }
194  }
195 
196  namespace ami {
197  template<class T, class CMPR>
198  err ptr_sort(stream<T> *instream_ami, stream<T> *outstream_ami,
199  CMPR *cmp, progress_indicator_base* indicator=NULL) {
200  TP_LOG_WARNING_ID("tpie::ami::ptr_sort is deprecated");
201  return sort(instream_ami, outstream_ami, cmp, indicator);
202  }
203  }
204 
205 // ********************************************************************
206 // * *
207 // * This version used to keep a heap of keys and pointers, but has *
208 // * been deprecated since nobody uses it. *
209 // * *
210 // ********************************************************************
211 
212  namespace ami {
213  template<class T, class KEY, class CMPR>
214  err key_sort(stream<T> *instream_ami, stream<T> *outstream_ami,
215  KEY, CMPR *cmp, progress_indicator_base* indicator=NULL) {
216  TP_LOG_WARNING_ID("tpie::ami::key_sort is deprecated");
217  return sort(instream_ami, outstream_ami, cmp, indicator);
218  }
219  }
220 
221 // ********************************************************************
222 // * *
223 // * Duplicates of the above versions that only use 2x space and *
224 // * overwrite the original input stream *
225 // * *
226 // ********************************************************************/
227 
232  namespace ami {
233  template<class T>
234  err sort(stream<T> *instream_ami,
235  progress_indicator_base* indicator=0) {
236  try {
237  if (indicator) {
238  tpie::sort(instream_ami->underlying_stream(), *indicator);
239  } else {
240  progress_indicator_null dummy(1);
241  tpie::sort(instream_ami->underlying_stream(), dummy);
242  }
243  } catch (const exception & e) {
244  TP_LOG_FATAL_ID(e.what());
245  return exception_kind(e);
246  }
247  return NO_ERROR;
248  }
249  }
250 
251 
256  namespace ami {
257  template<class T, class CMPR>
258  err sort(stream<T> *instream_ami,
259  CMPR *cmp, progress_indicator_base* indicator=NULL) {
260  try {
261  TPIE2STL_cmp<T, CMPR> comp(cmp);
262  if (indicator) {
263  tpie::sort(instream_ami->underlying_stream(), comp, *indicator);
264  } else {
265  progress_indicator_null dummy(1);
266  tpie::sort(instream_ami->underlying_stream(), comp, dummy);
267  }
268  } catch (const exception & e) {
269  TP_LOG_FATAL_ID(e.what());
270  return exception_kind(e);
271  }
272  return NO_ERROR;
273  }
274 
275  }
276 
281  namespace ami {
282  template<class T>
283  err ptr_sort(stream<T> *instream_ami,
284  progress_indicator_base* indicator=NULL) {
285  TP_LOG_WARNING_ID("tpie::ami::ptr_sort is deprecated");
286  return sort(instream_ami, indicator);
287  }
288  }
289 
294  namespace ami {
295  template<class T, class CMPR>
296  err ptr_sort(stream<T> *instream_ami,
297  CMPR *cmp, progress_indicator_base* indicator=NULL) {
298  TP_LOG_WARNING_ID("tpie::ami::ptr_sort is deprecated");
299  return sort(instream_ami, cmp, indicator);
300  }
301  }
302 
307  namespace ami {
308  template<class T, class KEY, class CMPR>
309  err key_sort(stream<T> *instream_ami,
310  KEY /*dummykey*/, CMPR *cmp, progress_indicator_base* indicator=NULL) {
311  TP_LOG_WARNING_ID("tpie::ami::key_sort is deprecated");
312  return sort(instream_ami, cmp, indicator);
313  }
314  }
315 
316 } // tpie namespace
317 
318 
319 #endif // __TPIE_SORT_DEPRECATED_H__
internal_sort.h
tpie::progress_indicator_base
The base class for indicating the progress of some task.
Definition: progress_indicator_base.h:62
tpie::sort
void sort(uncompressed_stream< T > &instream, uncompressed_stream< T > &outstream, Compare comp, progress_indicator_base &indicator)
Sort elements of a stream using the given STL-style comparator object.
Definition: sort.h:141
comparator.h
Conversion between STL and TPIE comparators.
portability.h
tpie::ami::END_OF_STREAM
@ END_OF_STREAM
An attempt was made to read past the end of a stream or write past the end of a substream.
Definition: err.h:52
tpie::ami::NO_ERROR
@ NO_ERROR
No error occurred.
Definition: err.h:47
tpie::ami::BTE_ERROR
@ BTE_ERROR
An error occurred at the BTE level.
Definition: err.h:63
progress_indicator_null.h
sort.h
tpie::pipelining::sort
pipe_middle< bits::sort_factory< pred_t, store_t > > sort(const pred_t &p=std::less< void >(), store_t store=default_store())
A pipelining node that sorts large elements indirectly by using a store and a given predicate.
Definition: sort.h:452
mergeheap.h
progress_indicator_base.h
sort_manager.h
tpie::ami::err
err
Legacy TPIE error codes.
Definition: err.h:45
tpie
Definition: access_type.h:26