[1/3] perl: Add database_countries() function.

Message ID 20200820172856.6983-1-stefan.schantl@ipfire.org
State Not Applicable
Headers
Series [1/3] perl: Add database_countries() function. |

Commit Message

Stefan Schantl Aug. 20, 2020, 5:28 p.m. UTC
  This function is used to the stored countries of a database, which
easily can be assigned to an array.

Signed-off-by: Stefan Schantl <stefan.schantl@ipfire.org>
---
 src/perl/Location.xs | 42 ++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 40 insertions(+), 2 deletions(-)
  

Comments

Michael Tremer Aug. 21, 2020, 9:58 a.m. UTC | #1
Thank you. I merged these. The tests run through.

I won’t tag a release just yet and will wait for the remaining work to be completed.

Best,
-Michael

> On 20 Aug 2020, at 18:28, Stefan Schantl <stefan.schantl@ipfire.org> wrote:
> 
> This function is used to the stored countries of a database, which
> easily can be assigned to an array.
> 
> Signed-off-by: Stefan Schantl <stefan.schantl@ipfire.org>
> ---
> src/perl/Location.xs | 42 ++++++++++++++++++++++++++++++++++++++++--
> 1 file changed, 40 insertions(+), 2 deletions(-)
> 
> diff --git a/src/perl/Location.xs b/src/perl/Location.xs
> index 5693744..3c347db 100644
> --- a/src/perl/Location.xs
> +++ b/src/perl/Location.xs
> @@ -6,11 +6,10 @@
> #include <stdio.h>
> #include <string.h>
> 
> -
> #include <loc/libloc.h>
> #include <loc/database.h>
> #include <loc/network.h>
> -
> +#include <loc/country.h>
> 
> MODULE = Location		PACKAGE = Location
> 
> @@ -119,6 +118,45 @@ get_license(db)
> 	OUTPUT:
> 		RETVAL
> 
> +void
> +database_countries(db)
> +	struct loc_database* db;
> +
> +	PPCODE:
> +		// Create Database enumerator
> +		struct loc_database_enumerator* enumerator;
> +		int err = loc_database_enumerator_new(&enumerator, db, LOC_DB_ENUMERATE_COUNTRIES);
> +
> +		if (err) {
> +			croak("Could not create a database enumerator\n");
> +		}
> +
> +		// Init and enumerate first country.
> +		struct loc_country* country;
> +		err = loc_database_enumerator_next_country(enumerator, &country);
> +		if (err) {
> +			croak("Could not enumerate next country\n");
> +		}
> +
> +		while (country) {
> +			// Extract the country code.
> +			const char* ccode = loc_country_get_code(country);
> +
> +			// Push country code.
> +			XPUSHs(sv_2mortal(newSVpv(ccode, 2)));
> +
> +			// Unref country pointer.
> +			loc_country_unref(country);
> +
> +			// Enumerate next item.
> +			err = loc_database_enumerator_next_country(enumerator, &country);
> +			if (err) {
> +				croak("Could not enumerate next country\n");
> +			}
> +		}
> +
> +		loc_database_enumerator_unref(enumerator);
> +
> #
> # Lookup functions
> #
> -- 
> 2.20.1
>
  

Patch

diff --git a/src/perl/Location.xs b/src/perl/Location.xs
index 5693744..3c347db 100644
--- a/src/perl/Location.xs
+++ b/src/perl/Location.xs
@@ -6,11 +6,10 @@ 
 #include <stdio.h>
 #include <string.h>
 
-
 #include <loc/libloc.h>
 #include <loc/database.h>
 #include <loc/network.h>
-
+#include <loc/country.h>
 
 MODULE = Location		PACKAGE = Location
 
@@ -119,6 +118,45 @@  get_license(db)
 	OUTPUT:
 		RETVAL
 
+void
+database_countries(db)
+	struct loc_database* db;
+
+	PPCODE:
+		// Create Database enumerator
+		struct loc_database_enumerator* enumerator;
+		int err = loc_database_enumerator_new(&enumerator, db, LOC_DB_ENUMERATE_COUNTRIES);
+
+		if (err) {
+			croak("Could not create a database enumerator\n");
+		}
+
+		// Init and enumerate first country.
+		struct loc_country* country;
+		err = loc_database_enumerator_next_country(enumerator, &country);
+		if (err) {
+			croak("Could not enumerate next country\n");
+		}
+
+		while (country) {
+			// Extract the country code.
+			const char* ccode = loc_country_get_code(country);
+
+			// Push country code.
+			XPUSHs(sv_2mortal(newSVpv(ccode, 2)));
+
+			// Unref country pointer.
+			loc_country_unref(country);
+
+			// Enumerate next item.
+			err = loc_database_enumerator_next_country(enumerator, &country);
+			if (err) {
+				croak("Could not enumerate next country\n");
+			}
+		}
+
+		loc_database_enumerator_unref(enumerator);
+
 #
 # Lookup functions
 #