Skip to content

Commit

Permalink
sipify QgsVectorLayerFeatureIterator
Browse files Browse the repository at this point in the history
  • Loading branch information
3nids committed May 23, 2017
1 parent 8d2f42a commit a14ad32
Show file tree
Hide file tree
Showing 9 changed files with 231 additions and 135 deletions.
2 changes: 1 addition & 1 deletion .ci/travis/code_layout/before_install.sh
Expand Up @@ -13,4 +13,4 @@
# #
###########################################################################

pip install autopep8
pip install autopep8
7 changes: 3 additions & 4 deletions .travis.yml
Expand Up @@ -41,15 +41,13 @@ matrix:


- os: linux
language: python # This lets us use newer python versions from virtualenv
language: python
env:
- TRAVIS_CONFIG=code_layout
dist: trusty
sudo: false
cache:
apt: true
#compiler: clang
#python: "3.3"
addons:
apt:
sources:
Expand All @@ -59,10 +57,11 @@ matrix:
- xvfb
- flip
# used for spell checks
- perl # lookahead regex in spell check script
- perl # sipify, lookahead regex in spell check script
- silversearcher-ag
- expect-dev # unbuffer
- coreutils
- libyaml-tiny-perl
# OSX based build with QT4 and Python 2
- os: osx
osx_image: xcode8.3 # MacOS 10.12: Sierra
Expand Down
1 change: 0 additions & 1 deletion python/auto_sip.blacklist
Expand Up @@ -2,7 +2,6 @@ core/conversions.sip
core/qgsexception.sip
core/qgis.sip
core/qgsrange.sip
core/qgsvectorlayerfeatureiterator.sip
core/composer/qgsaddremoveitemcommand.sip
core/composer/qgsgroupungroupitemscommand.sip
core/composer/qgsaddremovemultiframecommand.sip
Expand Down
32 changes: 32 additions & 0 deletions python/core/qgsfeatureiterator.sip
Expand Up @@ -8,6 +8,8 @@





class QgsAbstractFeatureIterator
{
%Docstring
Expand Down Expand Up @@ -123,6 +125,33 @@ Setup the simplification of geometries to fetch using the specified simplify met
};


template<T>
class QgsAbstractFeatureIteratorFromSource : QgsAbstractFeatureIterator
{
%Docstring
Helper template that cares of two things: 1. automatic deletion of source if owned by iterator, 2. notification of open/closed iterator.
.. note::

not available in Python bindings (although present in SIP file)
%End

%TypeHeaderCode
#include "qgsfeatureiterator.h"
%End
public:
QgsAbstractFeatureIteratorFromSource( T *source, bool ownSource, const QgsFeatureRequest &request );

~QgsAbstractFeatureIteratorFromSource();

protected:
void iteratorClosed();
%Docstring
to be called by from subclass in close()
%End

};


class QgsFeatureIterator
{
%Docstring
Expand Down Expand Up @@ -196,6 +225,9 @@ find out whether the iterator is still valid or closed already
%End


protected:


};


Expand Down
166 changes: 110 additions & 56 deletions python/core/qgsvectorlayerfeatureiterator.sip
@@ -1,93 +1,147 @@
/************************************************************************
* This file has been generated automatically from *
* *
* src/core/qgsvectorlayerfeatureiterator.h *
* *
* Do not edit manually ! Edit header and run scripts/sipify.pl again *
************************************************************************/

// abstract feature iterator implementations are not part of public API





%ModuleHeaderCode
#include "qgsfeatureiterator.h"
%End

class QgsVectorLayerFeatureSource : QgsAbstractFeatureSource
{
%Docstring
Partial snapshot of vector layer's state (only the members necessary for access to features)
%End

%TypeHeaderCode
#include <qgsvectorlayerfeatureiterator.h>
#include "qgsvectorlayerfeatureiterator.h"
%End
public:

/** Constructor for QgsVectorLayerFeatureSource.
* \param layer source layer
*/
explicit QgsVectorLayerFeatureSource( const QgsVectorLayer *layer );
%Docstring
Constructor for QgsVectorLayerFeatureSource.
\param layer source layer
%End

~QgsVectorLayerFeatureSource();

virtual QgsFeatureIterator getFeatures( const QgsFeatureRequest &request = QgsFeatureRequest() );
QgsFields fields();


QgsFields fields() const;
%Docstring
Returns the fields that will be available for features that are retrieved from
this source.

.. versionadded:: 3.0
:rtype: QgsFields
%End

protected:







};

class QgsVectorLayerFeatureIterator : QgsAbstractFeatureIterator

typedef QgsAbstractFeatureIteratorFromSource<QgsVectorLayerFeatureSource> QgsAbstractFeatureIteratorFromSourceQgsVectorLayerFeatureSourceBase;

class QgsVectorLayerFeatureIterator : QgsAbstractFeatureIteratorFromSourceQgsVectorLayerFeatureSourceBase
{

%TypeHeaderCode
#include <qgsvectorlayerfeatureiterator.h>
#include "qgsvectorlayerfeatureiterator.h"
#include "qgsfeatureiterator.h"
typedef QgsAbstractFeatureIteratorFromSource<QgsVectorLayerFeatureSource> QgsAbstractFeatureIteratorFromSourceQgsVectorLayerFeatureSourceBase;
%End
public:
QgsVectorLayerFeatureIterator( QgsVectorLayerFeatureSource *source, bool ownSource, const QgsFeatureRequest &request );

~QgsVectorLayerFeatureIterator();

//! reset the iterator to the starting position
virtual bool rewind();
%Docstring
reset the iterator to the starting position
:rtype: bool
%End

//! end of iterating: free the resources / lock
virtual bool close();
%Docstring
end of iterating: free the resources / lock
:rtype: bool
%End


struct FetchJoinInfo
{
const QgsVectorLayerJoinInfo *joinInfo;//!< Canonical source of information about the join
QgsAttributeList attributes; //!< Attributes to fetch
int indexOffset; //!< At what position the joined fields start
QgsVectorLayer *joinLayer; //!< Resolved pointer to the joined layer
int targetField; //!< Index of field (of this layer) that drives the join
int joinField; //!< Index of field (of the joined layer) must have equal value

void addJoinedAttributesCached( QgsFeature &f, const QVariant &joinValue ) const;
void addJoinedAttributesDirect( QgsFeature &f, const QVariant &joinValue ) const;
};


protected:
//! fetch next feature, return true on success
virtual bool fetchFeature( QgsFeature &feature );
%Docstring
fetch next feature, return true on success
:rtype: bool
%End

//! Overrides default method as we only need to filter features in the edit buffer
//! while for others filtering is left to the provider implementation.
virtual bool nextFeatureFilterExpression( QgsFeature &f );
%Docstring
while for others filtering is left to the provider implementation.
:rtype: bool
%End

//! Setup the simplification of geometries to fetch using the specified simplify method
virtual bool prepareSimplification( const QgsSimplifyMethod &simplifyMethod );
%Docstring
Setup the simplification of geometries to fetch using the specified simplify method
:rtype: bool
%End
















//! @note not available in Python bindings
//void rewindEditBuffer();
//! @note not available in Python bindings
//void prepareJoins();
//! @note not available in Python bindings
//void prepareExpressions();
//! @note not available in Python bindings
//bool fetchNextAddedFeature( QgsFeature &f );
//! @note not available in Python bindings
//bool fetchNextChangedGeomFeature( QgsFeature &f );
//! @note not available in Python bindings
//bool fetchNextChangedAttributeFeature( QgsFeature &f );
//! @note not available in Python bindings
//void useAddedFeature( const QgsFeature &src, QgsFeature &f );
//! @note not available in Python bindings
//void useChangedAttributeFeature( QgsFeatureId fid, const QgsGeometry &geom, QgsFeature &f );
//! @note not available in Python bindings
//bool nextFeatureFid( QgsFeature &f );
//! @note not available in Python bindings
//void addJoinedAttributes( QgsFeature &f );

/**
* Adds attributes that don't source from the provider but are added inside QGIS
* Includes
* - Joined fields
* - Expression fields
*
* @param f The feature will be modified
* @note not available in Python bindings
*/
//void addVirtualAttributes( QgsFeature &f );

/** Update feature with uncommitted attribute updates.
* @note not available in Python bindings
*/
//void updateChangedAttributes( QgsFeature &f );

/** Update feature with uncommitted geometry updates.
* @note not available in Python bindings
*/
//void updateFeatureGeometry( QgsFeature &f );

private:
QgsVectorLayerFeatureIterator( const QgsVectorLayerFeatureIterator &rhs );

};

/************************************************************************
* This file has been generated automatically from *
* *
* src/core/qgsvectorlayerfeatureiterator.h *
* *
* Do not edit manually ! Edit header and run scripts/sipify.pl again *
************************************************************************/

0 comments on commit a14ad32

Please sign in to comment.