HAL  v4.5.0-124-g47ab54673
The Hardware Analyzer - a comprehensive reverse engineering and manipulation framework for gate-level netlists.
project_json.cpp
Go to the documentation of this file.
2 #include <QFile>
3 #include <QFileInfo>
4 #include <QDir>
5 
6 namespace hal {
8  : mStatus(NotExisting)
9  {
10  mPathname = QFileInfo(filename).path();
11 
12  QFile ff(filename);
13  if (!ff.exists()) return;
14 
15  mStatus = CannotOpen;
16  if (!ff.open(QIODevice::ReadOnly)) return;
17 
18  mStatus = ParseError;
19  mDocument = QJsonDocument::fromJson(ff.readAll(), &mParseError);
20  if (mParseError.error != QJsonParseError::NoError) return;
21  if (!mDocument.isObject()) return;
22 
23  mStatus = NetlistError;
24  if (!mDocument.object().contains("netlist")) return;
25  mNetlist = mDocument.object()["netlist"].toString();
26  if (mNetlist.isEmpty()) return;
27  if (QFileInfo(mNetlist).isAbsolute())
28  {
29  if (!QFileInfo(mNetlist).exists()) return;
30  }
31  else
32  {
33  if (!QFileInfo(QDir(mPathname).absoluteFilePath(mNetlist)).exists()) return;
34  }
35 
36  mStatus = GatelibError;
37  if (!mDocument.object().contains("gate_library")) return;
38  mGatelib = mDocument.object()["gate_library"].toString();
39  if (mGatelib.isEmpty()) return;
40  if (QFileInfo(mGatelib).isAbsolute())
41  {
42  if (!QFileInfo(mGatelib).exists()) return;
43  }
44  else
45  {
46  if (!QFileInfo(QDir(mPathname).absoluteFilePath(mGatelib)).exists()) return;
47  }
48 
49  mStatus = Ok;
50  }
51 
53  {
54  if (mGatelib == gl) return;
55  mGatelib = gl;
56 
57  QJsonObject obj = mDocument.object();
58  obj.remove("gate_library");
59  obj.insert("gate_library", mGatelib);
60  mDocument = QJsonDocument(obj);
61 
62  QString fname = QDir(mPathname).absoluteFilePath(".project.json");
63  QFile::remove(fname);
64  QFile of(fname);
65  if (of.open(QIODevice::WriteOnly))
66  of.write(mDocument.toJson(QJsonDocument::Compact));
67  }
68 }
ProjectJson(const QString &filename)
Definition: project_json.cpp:7
void setGateLibraryFilename(const QString &gl)
Definition: defines.h:45
QString absoluteFilePath(const QString &fileName) const const
virtual bool open(QIODevice::OpenMode mode) override
bool remove()
QString path() const const
qint64 write(const char *data, qint64 maxSize)
QJsonDocument fromJson(const QByteArray &json, QJsonParseError *error)
bool isObject() const const
QJsonObject object() const const
QByteArray toJson() const const
bool contains(const QString &key) const const
QJsonObject::iterator insert(const QString &key, const QJsonValue &value)
void remove(const QString &key)
bool isEmpty() const const