NCBI C++ ToolKit
table_data_sorter.cpp
Go to the documentation of this file.

Go to the SVN repository for this file.

1 /* $Id: table_data_sorter.cpp 34591 2016-01-28 17:03:41Z katargir $
2  * ===========================================================================
3  *
4  * PUBLIC DOMAIN NOTICE
5  * National Center for Biotechnology Information
6  *
7  * This software/database is a "United States Government Work" under the
8  * terms of the United States Copyright Act. It was written as part of
9  * the author's official duties as a United States Government employee and
10  * thus cannot be copyrighted. This software/database is freely available
11  * to the public for use. The National Library of Medicine and the U.S.
12  * Government have not placed any restriction on its use or reproduction.
13  *
14  * Although all reasonable efforts have been taken to ensure the accuracy
15  * and reliability of the software and data, the NLM and the U.S.
16  * Government do not and cannot warrant the performance or results that
17  * may be obtained by using this software or data. The NLM and the U.S.
18  * Government disclaim all warranties, express or implied, including
19  * warranties of performance, merchantability or fitness for any particular
20  * purpose.
21  *
22  * Please cite the author in any work or product based on this material.
23  *
24  * ===========================================================================
25  *
26  * Authors: Roman Katargin
27  *
28  * File Description:
29  *
30  */
31 
32 #include <ncbi_pch.hpp>
33 
35 
37 
38 void CTableDataSorter::Sort(ITableData& tableData, size_t column,
39  size_t* begin, size_t* end, bool descending)
40 {
41  if (column >= tableData.GetColsCount())
42  return;
43 
45  if (type == ITableData::kInt) {
46  sort(begin, end, [&tableData, column, descending](size_t r1, size_t r2) -> bool
47  { auto v1 = tableData.GetIntValue(r1, column), v2 = tableData.GetIntValue(r2, column);
48  return descending ? (v1 > v2) : (v1 < v2); });
49  }
50  else if (type == ITableData::kReal) {
51  sort(begin, end, [&tableData, column, descending](size_t r1, size_t r2) -> bool
52  { auto v1 = tableData.GetRealValue(r1, column), v2 = tableData.GetRealValue(r2, column);
53  return descending ? (v1 > v2) : (v1 < v2); });
54  }
55  else {
56  string s1, s2;
57  sort(begin, end, [&tableData, column, descending, &s1, &s2](size_t r1, size_t r2) -> bool
58  { tableData.GetStringValue(r1, column, s1);
59  tableData.GetStringValue(r2, column, s2);
60  return descending ? (s1 > s2) : (s1 < s2); });
61  }
62 }
63 
static void Sort(ITableData &tableData, size_t column, size_t *begin, size_t *end, bool descending=false)
virtual ColumnType GetColumnType(size_t col) const =0
virtual double GetRealValue(size_t, size_t) const
Definition: table_data.hpp:70
virtual void GetStringValue(size_t, size_t, string &) const =0
virtual size_t GetColsCount() const =0
virtual long GetIntValue(size_t, size_t) const
Definition: table_data.hpp:69
const CVect2< U > & v2
Definition: globals.hpp:440
#define END_NCBI_SCOPE
End previously defined NCBI scope.
Definition: ncbistl.hpp:103
#define BEGIN_NCBI_SCOPE
Define ncbi namespace.
Definition: ncbistl.hpp:100
constexpr auto sort(_Init &&init)
static const char * column
Definition: stats.c:23
Definition: type.c:6
Modified on Sat Dec 09 04:43:47 2023 by modify_doxy.py rev. 669887