-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathDatabase.h
174 lines (155 loc) · 4.75 KB
/
Database.h
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
// Database.h: interface for the CDatabase class.
//
// $Id$
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_DATABASE_H__ABCAA3BA_D92C_44C6_AFC2_5D644C53FAE7__INCLUDED_)
#define AFX_DATABASE_H__ABCAA3BA_D92C_44C6_AFC2_5D644C53FAE7__INCLUDED_
#include "DBObject.h"
#include "PhreeqcI.h"
// forward declaration
class CLineParser;
class CLogicalLineParser;
class CPhreeqcCallback;
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
//
// CDatabase holds data specified within a phreeqc database file
//
class CDatabase : public CObject
{
// inner class
class CLoader
{
public:
// inner class
class CCookie
{
public:
CLogicalLineParser& m_rLogicalLineParser;
CCookie(CLogicalLineParser& rLogicalLineParser);
virtual ~CCookie();
};
public:
static BOOL CALLBACK LineCallBack(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb);
CLoader(LPCTSTR lpszFileName);
CLoader(CRichEditCtrl* pRichEditCtrl, int nSimulation);
virtual ~CLoader();
protected:
CLineParser* m_pLineParser;
CLogicalLineParser* m_pLogicalLineParser;
CPhreeqcCallback* m_pPhreeqcCallback;
};
class CLoader2
{
public:
CLoader2(LPCTSTR lpszFileName);
CLoader2(CRichEditCtrl* pRichEditCtrl, int nSimulation);
virtual ~CLoader2();
static int ReadCallBack(void *cookie);
static int WriteCallBack(const int action, const int type, const char *err_str, const int stop, void *cookie, const char *format, va_list args);
protected:
CStdioFile m_inputFile;
CString m_strErr;
CString m_strOther;
CString m_strAll;
CRichEditCtrl *m_pRichEditCtrl;
TEXTRANGE m_tr;
long m_nTextLength;
};
class CLoader3 : public PhreeqcI
{
public:
CLoader3(LPCTSTR lpszFileName);
CLoader3(CRichEditCtrl* pRichEditCtrl, int nSimulation);
virtual ~CLoader3();
int tidy_model_gui(void);
int tidy_species_gui(void);
void CopyPhreeqcStructs(CDatabase *db);
virtual int getc(void);
virtual void warning_msg(const char *err_str);
virtual void error_msg(const char * str, bool stop=false);
// opening files
virtual bool output_open(const char *file_name, std::ios_base::openmode mode = std::ios_base::out);
virtual bool log_open(const char *file_name, std::ios_base::openmode mode = std::ios_base::out);
virtual bool punch_open(const char *file_name, std::ios_base::openmode mode = std::ios_base::out, int n_user = 1);
virtual bool error_open(const char *file_name, const char * mode = "w");
virtual bool dump_open(const char *file_name, std::ios_base::openmode mode = std::ios_base::out);
protected:
//CStdioFile m_inputFile;
std::ifstream ifs;
CString m_strErr;
CString m_strOther;
CString m_strAll;
CRichEditCtrl *RichEditCtrl;
TEXTRANGE m_tr;
long m_nTextLength;
};
public:
CString GetPathName()const;
BOOL DenyWrite();
void Merge(const CDatabase& rDatabase);
BOOL Load(LPCTSTR lpszPathName);
BOOL Load(CRichEditCtrl* pRichEditCtrl, int nSimulation);
// sets
std::set<CDBElement> m_elementSet;
std::set<std::string> m_meanGammasSet;
std::set<CDBPhase> m_phaseSet;
std::set<CDBRate> m_rateSet;
std::set<std::string> m_rateHermanskaSet;
std::set<std::string> m_ratePKSet;
std::set<std::string> m_rateSVDSet;
std::set<CDBRedox> m_redoxSet;
std::set<CDBSS> m_solidSolutionSet;
std::set<CDBSpecies> m_speciesSet;
std::set<CDBSpecies> m_speciesAqSet;
std::set<CDBSpecies> m_speciesAqCationSet;
std::set<CDBSpecies> m_speciesAqAnionSet;
std::set<CDBSpecies> m_speciesAqNeutralSet;
std::set<CDBSpecies> m_speciesExSet;
std::set<CDBSpecies> m_speciesSurfSet;
std::set<CDBNamedExp> m_namedExpSet;
std::set<CDBCalcVal> m_calcValSet;
CDatabase();
CDatabase(const CDatabase& rDatabase); // copy ctor
virtual ~CDatabase();
protected:
CString m_strPathName;
void CopyPhreeqcStructs();
private:
CFile* m_pFile;
};
template<class T>inline
void merge_list(std::list<T>& L1, const std::list<T>& L2)
{
if (L2.size() == 0) return;
if (L1.size() == 0)
{
L1.insert(L1.begin(), L2.begin(), L2.end());
return;
}
std::list<T>::const_iterator it = L2.begin();
for (; it != L2.end(); ++it)
{
std::list<T>::iterator pos =
std::lower_bound(L1.begin(), L1.end(), *it);
if ( pos != L1.end() && !( *it < *pos ) ) {
ASSERT( std::binary_search(L1.begin(), L1.end(), *it) == true );
// item found don't add it
} else {
ASSERT( std::binary_search(L1.begin(), L1.end(), *it) == false );
// item not found insert it
L1.insert(pos, *it);
}
}
}
template<class T>inline
void merge_set(std::set<T>& S1, const std::set<T>& S2)
{
std::set<T>::const_iterator it = S2.begin();
for (; it != S2.end(); ++it)
{
S1.insert(*it);
}
}
#endif // !defined(AFX_DATABASE_H__ABCAA3BA_D92C_44C6_AFC2_5D644C53FAE7__INCLUDED_)