admin
2023-03-07 8b06b1cbf112d55307ea8a6efe711db4e7506d89
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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 *
 * This file is part of xlslib -- A multiplatform, C/C++ library
 * for dynamic generation of Excel(TM) files.
 *
 * Copyright 2009 David Hoerl All Rights Reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 *    1. Redistributions of source code must retain the above copyright notice, this list of
 *       conditions and the following disclaimer.
 *
 *    2. Redistributions in binary form must reproduce the above copyright notice, this list
 *       of conditions and the following disclaimer in the documentation and/or other materials
 *       provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY David Hoerl ''AS IS'' AND ANY EXPRESS OR IMPLIED
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL David Hoerl OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 *
 * File description:
 *
 *
 *
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
 
#ifndef HPSF_H
#define HPSF_H
 
#include <time.h>
 
#include "../common/xlsys.h"
#include "../common/systype.h"
 
// #include "common/xls_pshpack2.h"
 
namespace xlslib_core
{
#define SUMMARY_SIZE        4096
// one big blocks
 
#define FILETIME2UNIX_NS    11644473600000000ll
// from the web
 
    extern const unsigned32_t summaryFormat[4], docSummaryFormat[4], hpsfValues[];
    
    class CUnit;
 
    typedef enum _docType_t
    {
        HPSF_SUMMARY,
        HPSF_DOCSUMMARY
    } docType_t;
 
    typedef enum
    {
        HPSF_STRING=0,
        HPSF_BOOL,
        HPSF_INT16,
        HPSF_INT32,
        HPSF_INT64
    } hpsf_t;
    typedef union
    {
        std::string        *str;
        bool isOn;
        unsigned16_t val16;
        unsigned32_t val32;
        unsigned64_t val64;
    } hValue;
 
    class insertsort2;
    class HPSFitem
    {
        friend class insertsort2;
 
    private:
        unsigned16_t propID;
        hpsf_t variant;
        hValue value;
        size_t offset;
 
    public:
        HPSFitem(unsigned16_t type, const std::string& str);
        HPSFitem(unsigned16_t type, bool val);
        HPSFitem(unsigned16_t type, unsigned16_t val);
        HPSFitem(unsigned16_t type, unsigned32_t val);
        HPSFitem(unsigned16_t type, unsigned64_t val);
        ~HPSFitem();
 
        hValue                GetValue() const {return value; }
        unsigned16_t        GetPropID() const {return propID; }
        unsigned16_t        GetVariant() const {return (unsigned16_t)variant; }
 
        void SetOffset(size_t of) { offset=of; }
        size_t GetOffset() const { return offset; }
 
        size_t GetSize();   // actual length rounded up to 4 bytes
 
        bool operator< (const HPSFitem& rhs) const { return variant < rhs.variant; }
    };
 
    class insertsort2
    {
    public:
        bool operator()(HPSFitem* a, HPSFitem* b) const { return a->propID < b->propID; }
    };
 
    typedef std::set<xlslib_core::HPSFitem*, insertsort2 XLSLIB_DFLT_ALLOCATOR> HPSF_Set_t;
    typedef HPSF_Set_t::iterator HPSF_Set_Itor_t;
    typedef HPSF_Set_t::const_iterator HPSF_Set_ConstItor_t;
 
    class CHPSFdoc;
 
    class hpsf_doc_t
    {
        friend class CHPSFdoc;
 
    private:
        void insert(HPSFitem *item);
 
    public:
        hpsf_doc_t(docType_t dt);
        virtual ~hpsf_doc_t();
 
    public:
        void addItem(unsigned16_t key, unsigned16_t val) {insert(new HPSFitem(key, val)); }
        void addItem(unsigned16_t key, const std::string& str) {insert(new HPSFitem(key, str)); }
 
        void addItem(unsigned16_t key, bool val) {insert(new HPSFitem(key, val)); }
        void addItem(unsigned16_t key, unsigned32_t val) {insert(new HPSFitem(key, val)); }
        void addItem(unsigned16_t key, unsigned64_t val) {insert(new HPSFitem(key, val)); }
 
        //unsigned32_t    NumProperties() const {return numProperties;};
        unsigned64_t unix2mstime(time_t unixTime);
 
    public:
        virtual size_t GetSize(void) const;
        virtual CUnit* GetData(CDataStorage &datastore) const;
 
    private:
        docType_t docType;
        HPSF_Set_t itemList;
        //unsigned32_t    numProperties;
    };
 
 
    // forward ref
    class CDataStorage;
 
    class CHPSFdoc : public CUnit
    {
        friend class CSummaryInfo;
        friend class CDocSummaryInfo;
        friend class CDataStorage;
 
    protected:
        CHPSFdoc(CDataStorage &datastore, const hpsf_doc_t& docdef);
    private:
        virtual ~CHPSFdoc();
    };
}
 
 
// #include "common/xls_poppack.h"
 
#endif