xref: /aoo41x/main/autodoc/inc/ary/namesort.hxx (revision cdf0e10c)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 #ifndef ARY_NAMESORT_HXX
29 #define ARY_NAMESORT_HXX
30 
31 
32 
33 // USED SERVICES
34     // BASE CLASSES
35     // COMPONENTS
36     // PARAMETERS
37 
38 namespace ary
39 {
40 
41 /** Provides sensible sorting of ASCII names in programming languages.
42 
43     @descr
44     Names are compared case insensitive first. Only after they appear
45     equal that way, there is an additional case sensitive comparison.
46     The second comparison sorts upper case before lower case.
47 
48 */
49 struct LesserName
50 {
51     bool                operator()(
52                             const String &      i_s1,
53                             const String &      i_s2 ) const;
54   private:
55     // DATA
56 
57     static const csv::CharOrder_Table
58                         aOrdering1_;
59     static const csv::CharOrder_Table
60                         aOrdering2_;
61 };
62 
63 inline bool
64 LesserName::operator()( const String &      i_s1,
65                         const String &      i_s2 ) const
66 {
67     int result = i_s1.compare(aOrdering1_,i_s2);
68     if (result == 0)
69         result = i_s1.compare(aOrdering2_,i_s2);
70     return result < 0;
71 }
72 
73 
74 }   // namespace ary
75 #endif
76