windows-nt/Source/XPSP1/NT/admin/dsutils/displayspecifierupgrade/csvdsreader.hpp
2020-09-26 16:20:57 +08:00

118 lines
2.2 KiB
C++

#ifndef CSVDSREADER_HPP
#define CSVDSREADER_HPP
#include <comdef.h>
#include <set>
#include <map>
#include <list>
using namespace std;
typedef set <
pair<String,long>,
less< pair<String,long> > ,
Burnslib::Heap::Allocator< pair<String,long> >
> setOfObjects;
typedef map <
long,
LARGE_INTEGER,
less<long>,
Burnslib::Heap::Allocator<LARGE_INTEGER>
> mapOfOffsets;
typedef
map< String,
long,
less<String>,
Burnslib::Heap::Allocator<long>
> mapOfPositions;
class CSVDSReader
{
private:
mapOfOffsets localeOffsets; // locale x offsets
mapOfPositions propertyPositions; // properties x position
String fileName;
HANDLE file; // csv file
HRESULT parseProperties();
HRESULT parseLocales(const long *locales);
HRESULT
parseLine(
const wchar_t *line,
const long position,
StringList &values) const;
HRESULT
getObjectLine(
const long locale,
const wchar_t *object,
String &csvLine) const;
HRESULT
writeHeader(HANDLE fileOut) const;
public:
CSVDSReader();
// get all values from the csv
HRESULT
getCsvValues(
const long locale,
const wchar_t *object,
const wchar_t *property,
StringList &values) const;
// gets the csv value starting with value to XPValue
// leaves XPValue empty if did not find
HRESULT
getCsvValue(
const long locale,
const wchar_t *object,
const wchar_t *property,
const String &value,
String &XPValue) const;
HRESULT
makeLocalesCsv(
HANDLE fileOut,
const long *locales) const;
HRESULT
makeObjectsCsv(
HANDLE fileOut,
const setOfObjects &objects) const;
virtual ~CSVDSReader()
{
if (file!=INVALID_HANDLE_VALUE) CloseHandle(file);
}
HRESULT
read(
const wchar_t *fileName,
const long *locales);
const String& getFileName() const {return fileName;}
};
#endif