summaryrefslogtreecommitdiff
path: root/inc/global.hxx
blob: 00a91db3eeb6bc4c1f7dc931d15fd403c4bd669c (plain)
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
#ifndef __GLOBAL_HXX__
#define __GLOBAL_HXX__

#include <cppuhelper/implementationentry.hxx>
#include <com/sun/star/container/XNamed.hpp>

#include <hash_map>

namespace dpsource {

typedef ::__gnu_cxx::hash_map< ::rtl::OUString, 
    ::com::sun::star::uno::Reference< ::com::sun::star::container::XNamed >, 
    ::rtl::OUStringHash > NamedObjMapType;

// ============================================================================

typedef sal_Int32 StrID;

class SimpleSharedString
{
public:
    static const StrID EMPTY = 0;

    SimpleSharedString();
    SimpleSharedString(const SimpleSharedString& r);
    ~SimpleSharedString();

    const ::rtl::OUString*  getString(StrID nId);
    StrID               getStringId(const ::rtl::OUString& aStr);
    StrID               insertString(const ::rtl::OUString& aStr);

private:

    /** internal shared string table implementation */
    class StringTable
    {
    public:
        StrID insertString(const ::rtl::OUString& aStr);
        StrID getStringId(const ::rtl::OUString& aStr);
        const ::rtl::OUString* getString(StrID nId) const;
    
        StringTable();
        StringTable(const StringTable& r);
        ~StringTable();
    
    private:
        typedef ::__gnu_cxx::hash_map< ::rtl::OUString, StrID, ::rtl::OUStringHash > SharedStrMap;
    
        ::std::vector< ::rtl::OUString > maSharedStrings;
        SharedStrMap maSharedStringIds;
        StrID mnStrCount;
    };

    StringTable maStringTable;
};

// ============================================================================

}

#endif