You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
89 lines
3.1 KiB
89 lines
3.1 KiB
/***************************************************************************
|
|
* Copyright (C) 2005-2007 Nicolas Hadacek <hadacek@kde.org> *
|
|
* *
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
* it under the terms of the GNU General Public License as published by *
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
* (at your option) any later version. *
|
|
***************************************************************************/
|
|
#ifndef DEVICE_XML_TO_DATA_H
|
|
#define DEVICE_XML_TO_DATA_H
|
|
|
|
#include <tqmap.h>
|
|
#include <tqfile.h>
|
|
#include <tqtextstream.h>
|
|
|
|
#include "common/common/misc.h"
|
|
#include "common/common/streamer.h"
|
|
#include "devices/base/generic_device.h"
|
|
#include "xml_to_data.h"
|
|
|
|
namespace Device
|
|
{
|
|
class XmlToDataBase : public ::XmlToData
|
|
{
|
|
public:
|
|
XmlToDataBase() : _data(0) {}
|
|
|
|
protected:
|
|
mutable Data *_data;
|
|
TQMap<TQString, Data *> _map; // device -> data
|
|
|
|
virtual void parse();
|
|
virtual TQString currentDevice() const { return (_data ? _data->name() : TQString()); }
|
|
virtual TQString namespaceName() const = 0;
|
|
virtual Data *createData() const = 0;
|
|
virtual void processDevice(TQDomElement device);
|
|
virtual void checkPins(const TQMap<TQString, uint> &pinLabels) const = 0;
|
|
|
|
private:
|
|
TQMap<TQString, TQString> _documents; // document -> device
|
|
TQMap<TQString, TQStringList> _alternatives; // device -> alternatives
|
|
|
|
bool getFrequencyRange(OperatingCondition oc, Special special, TQDomElement element);
|
|
bool getMemoryTechnology(TQDomElement element);
|
|
Device::Package processPackage(TQDomElement element);
|
|
};
|
|
|
|
template <class DataType>
|
|
class XmlToData : public XmlToDataBase, public DataStreamer<DataType>
|
|
{
|
|
public:
|
|
virtual Device::Data *createData() const { return new DataType; }
|
|
DataType *data() { return static_cast<DataType *>(_data); }
|
|
const DataType *data() const { return static_cast<DataType *>(_data); }
|
|
virtual void output() {
|
|
TQFile dfile("deps.mak");
|
|
if ( !dfile.open(IO_WriteOnly) ) return;
|
|
TQTextStream dts(&dfile);
|
|
dts << "noinst_DATA = ";
|
|
uint i = 0;
|
|
TQMap<TQString, Data *>::const_iterator it;
|
|
for (it=_map.begin(); it!=_map.end(); ++it) {
|
|
if ( (i%10)==0 ) dts << "\\" << endl << " ";
|
|
dts << " " << it.key() << ".xml";
|
|
i++;
|
|
}
|
|
dts << endl;
|
|
dfile.close();
|
|
|
|
TQFile file(namespaceName().lower() + "_data.cpp");
|
|
if ( !file.open(IO_WriteOnly) ) return;
|
|
TQTextStream ts(&file);
|
|
ts << "#include \"devices/" << namespaceName().lower() << "/"
|
|
<< namespaceName().lower() << "/" << namespaceName().lower() << "_group.h\"" << endl << endl;
|
|
ts << "const char *" << namespaceName() << "::DATA_STREAM =" << endl;
|
|
TQValueList<DataType *> list;
|
|
for (it=_map.begin(); it!=_map.end(); ++it)
|
|
list.append(const_cast<DataType *>(static_cast<const DataType *>(it.data())));
|
|
uint size = this->toCppString(list, ts);
|
|
ts << ";" << endl;
|
|
ts << "const uint " << namespaceName() << "::DATA_SIZE = " << size << ";" << endl;
|
|
file.close();
|
|
}
|
|
};
|
|
|
|
} // namespace
|
|
|
|
#endif
|