File: string.h

package info (click to toggle)
wxpython3.0 3.0.2.0%2Bdfsg-4
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 482,760 kB
  • ctags: 518,293
  • sloc: cpp: 2,127,226; python: 294,045; makefile: 51,942; ansic: 19,033; sh: 3,013; xml: 1,629; perl: 17
file content (120 lines) | stat: -rw-r--r-- 2,892 bytes parent folder | download | duplicates (10)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
///////////////////////////////////////////////////////////////////////////////
// Name:        wx/gtk/private/string.h
// Purpose:     wxGtkString class declaration
// Author:      Vadim Zeitlin
// Created:     2006-10-19
// Copyright:   (c) 2006 Vadim Zeitlin <vadim@wxwindows.org>
// Licence:     wxWindows licence
///////////////////////////////////////////////////////////////////////////////

#ifndef _WX_GTK_PRIVATE_STRING_H_
#define _WX_GTK_PRIVATE_STRING_H_

// ----------------------------------------------------------------------------
// Convenience class for g_freeing a gchar* on scope exit automatically
// ----------------------------------------------------------------------------

class wxGtkString
{
public:
    explicit wxGtkString(gchar *s) : m_str(s) { }
    ~wxGtkString() { g_free(m_str); }

    const gchar *c_str() const { return m_str; }

    operator gchar *() const { return m_str; }

private:
    gchar *m_str;

    wxDECLARE_NO_COPY_CLASS(wxGtkString);
};


// ----------------------------------------------------------------------------
// list for sorting collated strings
// ----------------------------------------------------------------------------

#include "wx/string.h"
#include "wx/vector.h"
#include "wx/sharedptr.h"

class wxGtkCollatableString
{
public:
    wxGtkCollatableString( const wxString &label, gchar *key )
    {
        m_label = label;
        m_key = key;
    }

    ~wxGtkCollatableString()
    {
        if (m_key)
            g_free( m_key );
    }

    wxString     m_label;
    gchar       *m_key;
};

class wxGtkCollatedArrayString
{
public:
    wxGtkCollatedArrayString() { }

    int Add( const wxString &new_label )
    {
        int index = 0;

        gchar *new_key_lower = g_utf8_casefold( new_label.utf8_str(), -1);
        gchar *new_key = g_utf8_collate_key( new_key_lower, -1);
        g_free( new_key_lower );

        wxSharedPtr<wxGtkCollatableString> new_ptr( new wxGtkCollatableString( new_label, new_key ) );

        wxVector< wxSharedPtr<wxGtkCollatableString> >::iterator iter;
        for (iter = m_list.begin(); iter != m_list.end(); ++iter)
        {
            wxSharedPtr<wxGtkCollatableString> ptr = *iter;

            gchar *key = ptr->m_key;
            if (strcmp(key,new_key) >= 0)
            {
                m_list.insert( iter, new_ptr );
                return index;
            }
            index ++;
        }

        m_list.push_back( new_ptr );
        return index;
    }

    size_t GetCount()
    {
        return m_list.size();
    }

    wxString At( size_t index )
    {
        return m_list[index]->m_label;
    }

    void Clear()
    {
        m_list.clear();
    }

    void RemoveAt( size_t index )
    {
        m_list.erase( m_list.begin() + index );
    }

private:
    wxVector< wxSharedPtr<wxGtkCollatableString> > m_list;
};


#endif // _WX_GTK_PRIVATE_STRING_H_