enum loc_network_flags flags;
int family;
+ // Flatten output?
+ int flatten;
+
// Index of the AS we are looking at
unsigned int as_index;
// Enumerator
LOC_EXPORT int loc_database_enumerator_new(struct loc_database_enumerator** enumerator,
- struct loc_database* db, enum loc_database_enumerator_mode mode) {
+ struct loc_database* db, enum loc_database_enumerator_mode mode, int flags) {
struct loc_database_enumerator* e = calloc(1, sizeof(*e));
if (!e)
return -ENOMEM;
e->mode = mode;
e->refcount = 1;
+ // Flatten output?
+ e->flatten = (flags & LOC_DB_ENUMERATOR_FLAGS_FLATTEN);
+
// Initialise graph search
//e->network_stack[++e->network_stack_depth] = 0;
e->network_stack_depth = 1;
LOC_DB_ENUMERATE_COUNTRIES = 3,
};
+enum loc_database_enumerator_flags {
+ LOC_DB_ENUMERATOR_FLAGS_FLATTEN = (1 << 0),
+};
+
struct loc_database_enumerator;
int loc_database_enumerator_new(struct loc_database_enumerator** enumerator,
- struct loc_database* db, enum loc_database_enumerator_mode mode);
+ struct loc_database* db, enum loc_database_enumerator_mode mode, int flags);
struct loc_database_enumerator* loc_database_enumerator_ref(struct loc_database_enumerator* enumerator);
struct loc_database_enumerator* loc_database_enumerator_unref(struct loc_database_enumerator* enumerator);
return (PyObject*)self;
}
-static PyObject* Database_iterate_all(DatabaseObject* self, enum loc_database_enumerator_mode what) {
+static PyObject* Database_iterate_all(DatabaseObject* self, enum loc_database_enumerator_mode what, int flags) {
struct loc_database_enumerator* enumerator;
- int r = loc_database_enumerator_new(&enumerator, self->db, what);
+ int r = loc_database_enumerator_new(&enumerator, self->db, what, flags);
if (r) {
PyErr_SetFromErrno(PyExc_SystemError);
return NULL;
}
static PyObject* Database_ases(DatabaseObject* self) {
- return Database_iterate_all(self, LOC_DB_ENUMERATE_ASES);
+ return Database_iterate_all(self, LOC_DB_ENUMERATE_ASES, 0);
}
static PyObject* Database_search_as(DatabaseObject* self, PyObject* args) {
struct loc_database_enumerator* enumerator;
- int r = loc_database_enumerator_new(&enumerator, self->db, LOC_DB_ENUMERATE_ASES);
+ int r = loc_database_enumerator_new(&enumerator, self->db, LOC_DB_ENUMERATE_ASES, 0);
if (r) {
PyErr_SetFromErrno(PyExc_SystemError);
return NULL;
}
static PyObject* Database_networks(DatabaseObject* self) {
- return Database_iterate_all(self, LOC_DB_ENUMERATE_NETWORKS);
+ return Database_iterate_all(self, LOC_DB_ENUMERATE_NETWORKS, 0);
+}
+
+static PyObject* Database_networks_flattened(DatabaseObject *self) {
+ return Database_iterate_all(self, LOC_DB_ENUMERATE_NETWORKS, LOC_DB_ENUMERATOR_FLAGS_FLATTEN);
}
static PyObject* Database_search_networks(DatabaseObject* self, PyObject* args, PyObject* kwargs) {
return NULL;
struct loc_database_enumerator* enumerator;
- int r = loc_database_enumerator_new(&enumerator, self->db, LOC_DB_ENUMERATE_NETWORKS);
+ int r = loc_database_enumerator_new(&enumerator, self->db, LOC_DB_ENUMERATE_NETWORKS, 0);
if (r) {
PyErr_SetFromErrno(PyExc_SystemError);
return NULL;
}
static PyObject* Database_countries(DatabaseObject* self) {
- return Database_iterate_all(self, LOC_DB_ENUMERATE_COUNTRIES);
+ return Database_iterate_all(self, LOC_DB_ENUMERATE_COUNTRIES, 0);
}
static struct PyMethodDef Database_methods[] = {
NULL,
NULL,
},
+ {
+ "networks_flattened",
+ (getter)Database_networks_flattened,
+ NULL,
+ NULL,
+ NULL,
+ },
{
"vendor",
(getter)Database_get_vendor,