Replace usage of wcj by C API

This commit is contained in:
Florian Märkl 2022-03-14 09:49:52 +01:00
parent b8243a2b61
commit 9441c3b470
2 changed files with 29 additions and 7 deletions

View File

@ -77,16 +77,12 @@ bool IOModesController::prepareForWriting()
bool IOModesController::allChangesComitted()
{
// Get a list of available write changes
CutterJson changes = Core()->cmdj("wcj");
// Check if there is a change which isn't written to the file
for (CutterJson changeObject : changes) {
if (!changeObject["written"].toBool()) {
RzCoreLocked core(Core());
for (auto c : CutterPVector<RzIOCache>(&core->io->cache)) {
if (!c->written) {
return false;
}
}
return true;
}

View File

@ -25,6 +25,32 @@
(char *)it != (char *)(vec)->a + ((vec)->len * (vec)->elem_size); \
it = (type *)((char *)it + (vec)->elem_size))
template<typename T> class CutterPVector
{
private:
const RzPVector * const vec;
public:
class iterator : public std::iterator<std::input_iterator_tag, T *>
{
private:
T **p;
public:
iterator(T **p) : p(p) {}
iterator(const iterator &o) : p(o.p) {}
iterator &operator++() { p++; return *this; }
iterator operator++(int) { iterator tmp(*this); operator++(); return tmp; }
bool operator==(const iterator &rhs) const {return p == rhs.p;}
bool operator!=(const iterator &rhs) const {return p != rhs.p;}
T *operator*() { return *p; }
};
CutterPVector(const RzPVector *vec) : vec(vec) {}
iterator begin() const { return iterator(reinterpret_cast<T **>(vec->v.a)); }
iterator end() const { return iterator(reinterpret_cast<T **>(vec->v.a) + vec->v.len); }
};
// Global information for Cutter
#define APPNAME "Cutter"