mirror of
https://github.com/facebook/sapling.git
synced 2024-10-12 09:48:05 +03:00
228e6a901e
Summary: Moves cstore to hgext/extlib/ and makes it build. Test Plan: make local && run-tests.py Reviewers: #mercurial Differential Revision: https://phabricator.intern.facebook.com/D6678852
46 lines
1.1 KiB
C++
46 lines
1.1 KiB
C++
// pythonkeyiterator.h - c++ implementation of python key iterator
|
|
//
|
|
// Copyright 2017 Facebook, Inc.
|
|
//
|
|
// This software may be used and distributed according to the terms of the
|
|
// GNU General Public License version 2 or any later version.
|
|
//
|
|
// no-check-code
|
|
|
|
#ifndef FBHGEXT_PYTHONKEYITERATOR_H
|
|
#define FBHGEXT_PYTHONKEYITERATOR_H
|
|
|
|
#include "hgext/extlib/cstore/pythonutil.h"
|
|
|
|
class PythonKeyIterator : public KeyIterator {
|
|
private:
|
|
PythonObj _input;
|
|
Key _current;
|
|
|
|
public:
|
|
PythonKeyIterator(PythonObj input) :
|
|
_input(input) {}
|
|
|
|
Key *next() {
|
|
PyObject *item;
|
|
while ((item = PyIter_Next((PyObject*)_input)) != NULL) {
|
|
PythonObj itemObj(item);
|
|
|
|
char *name;
|
|
Py_ssize_t namelen;
|
|
char *node;
|
|
Py_ssize_t nodelen;
|
|
if (!PyArg_ParseTuple(item, "s#s#", &name, &namelen, &node, &nodelen)) {
|
|
throw pyexception();
|
|
}
|
|
|
|
_current = Key(name, namelen, node, nodelen);
|
|
return &_current;
|
|
}
|
|
|
|
return NULL;
|
|
}
|
|
};
|
|
|
|
#endif //FBHGEXT_PYTHONKEYITERATOR_H
|