浏览代码

Start writing spec

Billy Barrow 15 小时之前
父节点
当前提交
e9626b26e2
共有 3 个文件被更改,包括 1595 次插入1 次删除
  1. 72 0
      SPECIFICATION.md
  2. 1 1
      src/lib/File.vala
  3. 1522 0
      src/vapi/invercargill-1.vapi

+ 72 - 0
SPECIFICATION.md

@@ -0,0 +1,72 @@
+# USM Manifest JSON Schema Specification
+
+## Overview
+
+The USM (Universal Source Manifest) is a JSON-based format that defines the structure and metadata of a software package. It provides all necessary information for building, installing, and managing software packages across different systems.
+
+The manifest file must be named named `MANIFEST.usm` and is located at the root of a software project.
+
+## Schema Structure
+
+The USM manifest file is contains a JSON object with the following properties:
+
+- `name` (string, required): The name of the software package (no spaces allowed).
+- `version` (string, required): The semantic version of the package, with an optional package version separated by a `+`, e.g.: 
+    - `"1.1.2"` for a regular release.
+    - `"1.1.2+1` for the same version, but with a fix to the packaging.
+- `summary` (string, required): A short summary describing the package, e.g. `Universal Source Manifest` for the package `usm`.
+- `liceences` (array, required): A list of licences applicable to this package, the array contains a license object with thr following required properties:
+    - `name` (string, required): The name of the licence.
+    - `text` (string, required): The path, relative to the MANIFEST.usm of the full text of the licence.
+    - `category` (string, required): Must be one of:
+        - `"libre"`: for software that meets the [four essential freedoms](https://www.gnu.org/philosophy/free-sw.en.html#fs-definition), that being (from gnu.org):
+            - The freedom to run the program as you wish, for any purpose (freedom 0).
+            - The freedom to study how the program works, and change it so it does your computing as you wish (freedom 1). Access to the source code is a precondition for this.
+            - The freedom to redistribute copies so you can help others (freedom 2).
+            - The freedom to distribute copies of your modified versions to others (freedom 3). By doing this you can give the whole community a chance to benefit from your changes. Access to the source code is a precondition for this.
+        - `"open-source"`: for software which may be regarded as "open source" but fall short of the free software definition. In cases where an "open-source" licence *does* meet all the criteria to be considered free/libre software (by the above definition), `"libre"` must be used instead. Examples of licences considered open-source but not libre include:
+            - The [NASA Open Source Agreement v1.3](https://directory.fsf.org/wiki/License:NASA-1.3) is not recognised as a "libre" licence because it includes a provision requiring changes to be your “original creation”, conflicting with "freedom 1" since you cannot make changes that incorporate intellectual property that may be under a permissive licence.
+            - The [Artistic-1.0](https://directory.fsf.org/wiki/License:Artistic-1.0) licence is too vague and might not protect the user's freedoms.
+        - `"source-available"`: for software that makes the full source code available, but has restrictions on what the user can do with the software, or the source code. Examples include:
+            - The [Microsoft Shared Source CLI, C#, and Jscript License](https://directory.fsf.org/wiki/License:Ms-SS) which does not permit commercial distribution.
+            - The [The Anti-Capitalist Software License (v 1.4)](https://directory.fsf.org/wiki/License:ANTI-1.4) which places restriction on the types of users or organisations that may make use of the software.
+            - The [JSON License](https://directory.fsf.org/wiki/License:JSON) which mandates that "The Software shall be used for Good, not Evil", thereby violating freedom 0 above.
+        - `"proprietary"`: for everything else.
+- `provides` (object, required): An dictionary object containting properties describing the resources that this software package provides:
+    - The property name must be a [ResourceRef](#resource-references) string describing a resource that this package provides.
+    - The value may be either:
+        - An object with the following properties:
+            - `path` (string): The path to the resource file, relative to `pathBase`. Required when `type` is `"reg"` and `pathBase` is not `"as-expected"`, must not be set otherwise.
+            - `pathBase` (string): What the `path` property is relative to. It is required when `type` is `"reg"` and must not be set otherwise. It can be set to one of the following:
+                - `"source"`: referencing the path to the extracted source code.
+                - `"build"`: referencing the path to the built output (e.g. where the result of `make` might go).
+                - `"install"`: referencing the path to the install output (e.g. where the result of `make install` might go).
+                - `"as-expected"` which will copy the file from the install output (e.g. where the result of `make install` might go) in the place expected for a resource of the type and name specified by the [ResourceRef](#resource-references). When in use, `path` must be an empty string.
+            - `type` (string, required): The type of filesystem entry for this resource, can be one of the following:
+                - `"reg"`: For regular files.
+                - `"dir"`: For making directories.
+                - `"lnk"`: For symbolic links.
+            - `dest` (string): The destination for the symbolic link. Required when `type` is `"lnk"` and must not be set otherwise.
+            - `keepOn` (string array): For setting restrictions on deleting this resource, each string in the array can be one of the following:
+                - `"final"`: To inhibit deletion when the package is being uninstalled at the request of the user.
+                - `"upgrade"`: To inhibit deletion of the resource when the package is being uninstalled to make way for an updated version.
+                - `"downgrade"`: To inhibit deletion of the resource when the package is being uninstalled to make way for an older version.
+            - `skipFor` (sting array): For setting restrictions on installing this resource, each string in the array can be one of the following:
+                - `"fresh"`: To inhibit installation of the resource when the package is being installed for the first time.
+                - `"upgrade"`: To inhibit the installation of the resource when the package is being updated to a newer version.
+                - `"downgrade"`: To inhibit the installation of the resource when the package is being downgraded to an older version.
+        - A shorthand string in the format `[path-base]:[path]` describing the file path to the resource so that it can be copied on installation (see `pathBase` and `path` properties above).
+        - The literal string `"as-expected"` (sans colon) which has the same meaning as `{"pathBase": "as-expected"}` above.
+- `depends` (object, required): An object with the following properties describing different kinds of package dependencies:
+    - `runtime` (string array, required): Each string must be a [ResourceRef](#resource-references) describing the resources this package needs at runtime.
+    - `build` (string array, required): Each string must be a [ResourceRef](#resource-references) describing the resources this package needs at compile (build) time.
+    - `manage` (string arraym required): Each string must be a [ResourceRef](#resource-references) describing the resources needed to run the processes specified in the `execs` section of the manifest (other than `acquire`).
+    - `acquire` (string array): Each string must be a [ResourceRef](#resource-references) describing the resources this package needs to run the acquire script (when specified on the `acquire` property of the `execs` object).
+- `flags` (string array, required): A list of flags for this manifest, each string in the array can be one of the following:
+    - `"buildInSourceTree"` to tell usm to not create a separate build directory, and compile the package "in place".
+    - `"setManifestPropertyEnvs"` idk TODO
+
+
+                
+
+## Resource References

+ 1 - 1
src/lib/File.vala

@@ -15,7 +15,7 @@ namespace Usm {
 
         public static PropertyMapper<ManifestFile> get_mapper() {
             return PropertyMapper.build_for<ManifestFile>(cfg => {
-                cfg.map<string>("path", o => o.path, (o, v) => o.path = v);
+                cfg.map<string>("path", o => o.path, (o, v) => o.path = v); // TODO make nullable in some cases, add validtion (i.e. type != reg, and pathBase == as-expected)
                 cfg.map<string>("pathBase", o => o.path_base.to_string(), (o, v) => o.path_base = ManifestFilePathBase.from_string(v));
                 cfg.map<string>("type", o => o.file_type.to_string(), (o, v) => o.file_type = ManifestFileType.from_string(v));
                 cfg.map<string>("dest", o => o.destination, (o, v) => o.destination = v)

+ 1522 - 0
src/vapi/invercargill-1.vapi

@@ -0,0 +1,1522 @@
+/* invercargill-1.vapi generated by valac 0.56.18, do not modify. */
+
+[CCode (gir_namespace = "invercargill", gir_version = "1")]
+namespace Invercargill {
+	namespace DataStructures {
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public class Buffer<T> : Invercargill.Enumerable<T>, Invercargill.Lot<T>, Invercargill.ReadOnlyAddressable<T>, Invercargill.Addressable<T> {
+			public Buffer (uint size);
+			public override uint count (Invercargill.PredicateDelegate<T>? predicate = null);
+			public override Invercargill.EnumerableInfo get_info ();
+			public override Invercargill.Tracker<T> get_tracker ();
+			public override uint? peek_count ();
+		}
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public class ByteBuffer : Invercargill.DataStructures.Buffer<uint8>, Invercargill.Hashable, Invercargill.Sticky<Invercargill.BinaryData,uint8>, Invercargill.BinaryData, Invercargill.ReadOnlyAddressableBytes, Invercargill.AddressableBytes {
+			public ByteBuffer (uint size);
+			public ByteBuffer.from_base64 (string data);
+			public ByteBuffer.from_byte_array (uint8[] data);
+			public ByteBuffer.from_bytes (GLib.Bytes data);
+			public ByteBuffer.from_enumerable (Invercargill.Enumerable<uint8> data);
+			public ByteBuffer.from_hex (string data);
+		}
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public class Dictionary<TKey,TValue> : Invercargill.Enumerable<Invercargill.KeyValuePair<TKey,TValue>>, Invercargill.Lot<Invercargill.KeyValuePair<TKey,TValue>>, Invercargill.ReadOnlyCollection<Invercargill.KeyValuePair<TKey,TValue>>, Invercargill.ReadOnlyAssociative<TKey,TValue>, Invercargill.Associative<TKey,TValue> {
+			public Dictionary (Invercargill.HashDelegate<TKey>? key_hash_func = null, Invercargill.EqualityDelegate<TKey>? key_equal_func = null);
+			public override Invercargill.EnumerableInfo get_info ();
+			public override Invercargill.Tracker<Invercargill.KeyValuePair<TKey,TValue>> get_tracker ();
+			public override uint? peek_count ();
+		}
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public class Fifo<T> : Invercargill.Enumerable<T>, Invercargill.Queue<T> {
+			public Fifo ();
+			public override Invercargill.EnumerableInfo get_info ();
+			public override Invercargill.Tracker<T> get_tracker ();
+			public override uint? peek_count ();
+			public void push_start (owned T item);
+		}
+		[CCode (cheader_filename = "invercargill-1.h")]
+		[GIR (name = "DataStructuresHashSet")]
+		public class HashSet<T> : Invercargill.Enumerable<T>, Invercargill.Lot<T>, Invercargill.ReadOnlyCollection<T>, Invercargill.ReadOnlySet<T>, Invercargill.Set<T> {
+			public HashSet (Invercargill.HashDelegate<T>? value_hash_func = null, Invercargill.EqualityDelegate<T>? value_equal_func = null);
+			public override Invercargill.EnumerableInfo get_info ();
+			public override Invercargill.Tracker<T> get_tracker ();
+			public override uint? peek_count ();
+			public void remove_all_where (Invercargill.PredicateDelegate<T> predicate);
+			public void remove_first_where (Invercargill.PredicateDelegate<T> predicate);
+		}
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public class ImmutableBuffer<T> : Invercargill.Enumerable<T>, Invercargill.Lot<T>, Invercargill.ImmutableLot<T>, Invercargill.ReadOnlyAddressable<T> {
+			public ImmutableBuffer (Invercargill.Enumerable<T> items);
+			public override uint count (Invercargill.PredicateDelegate<T>? predicate = null);
+			public override Invercargill.EnumerableInfo get_info ();
+			public override Invercargill.Tracker<T> get_tracker ();
+			public override uint? peek_count ();
+		}
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public class Lifo<T> : Invercargill.Enumerable<T>, Invercargill.Queue<T> {
+			public Lifo ();
+			public override Invercargill.EnumerableInfo get_info ();
+			public override Invercargill.Tracker<T> get_tracker ();
+			public override uint? peek_count ();
+			public void push_start (owned T item);
+		}
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public class PriorityQueue<T> : Invercargill.Enumerable<T>, Invercargill.Queue<T> {
+			public PriorityQueue (owned Invercargill.CompareDelegate<T> compare_func);
+			public override Invercargill.EnumerableInfo get_info ();
+			public override Invercargill.Tracker<T> get_tracker ();
+			public override uint? peek_count ();
+		}
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public class PropertyDictionary : Invercargill.DataStructures.Dictionary<string,Invercargill.Element>, Invercargill.Properties {
+			public PropertyDictionary ();
+		}
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public class RingBuffer<T> : Invercargill.Enumerable<T>, Invercargill.Lot<T>, Invercargill.ReadOnlyAddressable<T>, Invercargill.Addressable<T> {
+			public RingBuffer (uint size);
+			public override uint count (Invercargill.PredicateDelegate<T>? predicate = null);
+			public override Invercargill.EnumerableInfo get_info ();
+			public override Invercargill.Tracker<T> get_tracker ();
+			public Invercargill.Enumerable<T> once ();
+			public override uint? peek_count ();
+		}
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public class Series<T> : Invercargill.Enumerable<T>, Invercargill.Lot<T>, Invercargill.ReadOnlyCollection<T>, Invercargill.Collection<T> {
+			public Series ();
+			public void add_all_start (Invercargill.Enumerable<T> items);
+			public void add_start (T item);
+			public override Invercargill.EnumerableInfo get_info ();
+			public override Invercargill.Tracker<T> get_tracker ();
+			public override uint? peek_count ();
+			public T pop_start () throws Invercargill.SequenceError;
+			public override T[] to_array ();
+		}
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public class SortedSeries<T> : Invercargill.Enumerable<T>, Invercargill.Lot<T>, Invercargill.ReadOnlyCollection<T>, Invercargill.Collection<T> {
+			public SortedSeries (owned Invercargill.CompareDelegate<T>? comparitor = null);
+			public override Invercargill.EnumerableInfo get_info ();
+			public override Invercargill.Tracker<T> get_tracker ();
+			public override uint? peek_count ();
+		}
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public class SortedVector<T> : Invercargill.Enumerable<T>, Invercargill.Lot<T>, Invercargill.ReadOnlyCollection<T>, Invercargill.ReadOnlyAddressable<T>, Invercargill.Collection<T> {
+			public SortedVector (owned Invercargill.CompareDelegate<T>? comparitor = null);
+			public override Invercargill.EnumerableInfo get_info ();
+			public override Invercargill.Tracker<T> get_tracker ();
+			public override uint? peek_count ();
+		}
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public class Vector<T> : Invercargill.Enumerable<T>, Invercargill.Lot<T>, Invercargill.ReadOnlyCollection<T>, Invercargill.ReadOnlyAddressable<T>, Invercargill.Collection<T>, Invercargill.Addressable<T>, Invercargill.AddressableCollection<T> {
+			public Vector ();
+			public override uint count (Invercargill.PredicateDelegate<T>? predicate = null);
+			public override Invercargill.EnumerableInfo get_info ();
+			public override Invercargill.Tracker<T> get_tracker ();
+			public override T last (owned Invercargill.PredicateDelegate<T>? predicate = null) throws Invercargill.SequenceError;
+			public override T last_or_default (owned Invercargill.PredicateDelegate<T>? predicate = null);
+			public override uint? peek_count ();
+			public override T[] to_array ();
+		}
+	}
+	namespace Generators {
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public class Deferred<T> : Invercargill.Enumerable<T> {
+			public Deferred (owned Invercargill.Generators.DeferredDelegate<T> func);
+			public override Invercargill.EnumerableInfo get_info ();
+			public override Invercargill.Tracker<T> get_tracker ();
+			public override uint? peek_count ();
+		}
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public class Directory : Invercargill.Enumerable<string> {
+			public Directory (owned GLib.Dir dir);
+			public override Invercargill.EnumerableInfo get_info ();
+			public override Invercargill.Tracker<string> get_tracker ();
+			public override uint? peek_count ();
+		}
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public class Empty<T> : Invercargill.Enumerable<T> {
+			public Empty ();
+			public override Invercargill.EnumerableInfo get_info ();
+			public override Invercargill.Tracker<T> get_tracker ();
+			public override uint? peek_count ();
+		}
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public class Function<T> : Invercargill.Enumerable<T> {
+			public Function (owned Invercargill.Generators.GeneratorDelegate<T> generator);
+			public override Invercargill.EnumerableInfo get_info ();
+			public override Invercargill.Tracker<T> get_tracker ();
+			public override uint? peek_count ();
+		}
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public class GeneratorResult<T> {
+			public GeneratorResult (T item, Invercargill.Generators.GeneratorResultType type);
+			public static Invercargill.Generators.GeneratorResult<T> end<T> ();
+			public static Invercargill.Generators.GeneratorResult<T> end_if_null<T> (T item);
+			public static Invercargill.Generators.GeneratorResult<T> item<T> (T item);
+			public static Invercargill.Generators.GeneratorResult<T> skip<T> ();
+			public static Invercargill.Generators.GeneratorResult<T> skip_if_null<T> (T item);
+			public Invercargill.Generators.GeneratorResultType result { get; private set; }
+			public T value { get; private set; }
+		}
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public class Range : Invercargill.Enumerable<int> {
+			public Range (int initial, int end, int stride);
+			public override Invercargill.EnumerableInfo get_info ();
+			public override Invercargill.Tracker<int> get_tracker ();
+			public override uint? peek_count ();
+		}
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public enum GeneratorResultType {
+			VALUE,
+			SKIP,
+			END
+		}
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public delegate Invercargill.Enumerable<T> DeferredDelegate<T> ();
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public delegate Invercargill.Generators.GeneratorResult<T> GeneratorDelegate<T> ();
+	}
+	namespace Iterate {
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public static Invercargill.Enumerable<T> deferred<T> (owned Invercargill.Generators.DeferredDelegate<T> function);
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public static Invercargill.Enumerable<string> directory (string path, uint flags = 0) throws GLib.FileError;
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public static Invercargill.Enumerable<T> nothing<T> ();
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public static Invercargill.Enumerable<T> on<T> (owned Invercargill.Generators.GeneratorDelegate<T> function);
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public static Invercargill.Enumerable<int> range (int from, int to, int increment = 1);
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public static Invercargill.Enumerable<T> single<T> (T item);
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public static Invercargill.Enumerable<T> these<T> (owned T item1, ...);
+	}
+	namespace Mapping {
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public class PropertyMapper<T> : GLib.Object, Invercargill.Mapping.Mapper<T,Invercargill.Properties> {
+			public static Invercargill.Mapping.PropertyMapper<T> build_for<T> (GLib.Func<Invercargill.Mapping.PropertyMapperBuilder<T>> func);
+			public void map_into (T object, Invercargill.ReadOnlyAssociative<string,Invercargill.Element> properties) throws GLib.Error;
+		}
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public class PropertyMapperBuilder<T> {
+			public PropertyMapperBuilder ();
+			public virtual Invercargill.Mapping.PropertyMapper<T> build ();
+			public virtual Invercargill.Mapping.PropertyMappingBuilder<T> map<TProp> (string name, owned Invercargill.Mapping.PropertyGetter<T,TProp> getter, owned Invercargill.Mapping.PropertySetter<T,TProp> setter);
+			public virtual Invercargill.Mapping.PropertyMappingBuilder<T> map_many<TObj> (string name, owned Invercargill.Mapping.PropertyGetter<T,Invercargill.Enumerable<TObj>> getter, owned Invercargill.Mapping.PropertySetter<T,Invercargill.Enumerable<TObj>> setter);
+			public virtual Invercargill.Mapping.PropertyMappingBuilder<T> map_many_with<TNative,TElement> (string name, owned Invercargill.Mapping.PropertyGetter<T,Invercargill.Enumerable<TNative>> getter, owned Invercargill.Mapping.PropertySetter<T,Invercargill.Enumerable<TNative>> setter, Invercargill.Mapping.Mapper<TNative,TElement> mapper);
+			public virtual Invercargill.Mapping.PropertyMappingBuilder<T> map_properties_with<TObj> (string name, owned Invercargill.Mapping.PropertyGetter<T,TObj> getter, owned Invercargill.Mapping.PropertySetter<T,TObj> setter, Invercargill.Mapping.PropertyMapper<TObj> mapper);
+			public virtual Invercargill.Mapping.PropertyMappingBuilder<T> map_property_groups_with<TObj> (string name, owned Invercargill.Mapping.PropertyGetter<T,Invercargill.Enumerable<TObj>> getter, owned Invercargill.Mapping.PropertySetter<T,Invercargill.Enumerable<TObj>> setter, Invercargill.Mapping.PropertyMapper<TObj> mapper);
+			public virtual Invercargill.Mapping.PropertyMappingBuilder<T> map_with<TNative,TElement> (string name, owned Invercargill.Mapping.PropertyGetter<T,TNative> getter, owned Invercargill.Mapping.PropertySetter<T,TNative> setter, Invercargill.Mapping.Mapper<TNative,TElement> mapper);
+			public virtual Invercargill.Mapping.PropertyMapperBuilder<T> set_constructor (Invercargill.Mapping.ObjectConstructor<T> constructor);
+		}
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public class PropertyMappingBuilder<T> : Invercargill.Mapping.PropertyMapperBuilder<T> {
+			public override Invercargill.Mapping.PropertyMapper<T> build ();
+			public override Invercargill.Mapping.PropertyMappingBuilder<T> map<TProp> (string name, owned Invercargill.Mapping.PropertyGetter<T,TProp> getter, owned Invercargill.Mapping.PropertySetter<T,TProp> setter);
+			public override Invercargill.Mapping.PropertyMappingBuilder<T> map_many<TObj> (string name, owned Invercargill.Mapping.PropertyGetter<T,Invercargill.Enumerable<TObj>> getter, owned Invercargill.Mapping.PropertySetter<T,Invercargill.Enumerable<TObj>> setter);
+			public override Invercargill.Mapping.PropertyMappingBuilder<T> map_many_with<TNative,TElement> (string name, owned Invercargill.Mapping.PropertyGetter<T,Invercargill.Enumerable<TNative>> getter, owned Invercargill.Mapping.PropertySetter<T,Invercargill.Enumerable<TNative>> setter, Invercargill.Mapping.Mapper<TNative,TElement> mapper);
+			public override Invercargill.Mapping.PropertyMappingBuilder<T> map_properties_with<TObj> (string name, owned Invercargill.Mapping.PropertyGetter<T,TObj> getter, owned Invercargill.Mapping.PropertySetter<T,TObj> setter, Invercargill.Mapping.PropertyMapper<TObj> mapper);
+			public override Invercargill.Mapping.PropertyMappingBuilder<T> map_property_groups_with<TObj> (string name, owned Invercargill.Mapping.PropertyGetter<T,Invercargill.Enumerable<TObj>> getter, owned Invercargill.Mapping.PropertySetter<T,Invercargill.Enumerable<TObj>> setter, Invercargill.Mapping.PropertyMapper<TObj> mapper);
+			public override Invercargill.Mapping.PropertyMappingBuilder<T> map_with<TNative,TElement> (string name, owned Invercargill.Mapping.PropertyGetter<T,TNative> getter, owned Invercargill.Mapping.PropertySetter<T,TNative> setter, Invercargill.Mapping.Mapper<TNative,TElement> mapper);
+			public Invercargill.Mapping.PropertyMappingBuilder<T> null_when (owned Invercargill.Mapping.PropertyPredicate<T> predicate);
+			public override Invercargill.Mapping.PropertyMapperBuilder<T> set_constructor (Invercargill.Mapping.ObjectConstructor<T> constructor);
+			public Invercargill.Mapping.PropertyMappingBuilder<T> undefined_when (owned Invercargill.Mapping.PropertyPredicate<T> predicate);
+			public Invercargill.Mapping.PropertyMappingBuilder<T> when_null (owned Invercargill.Mapping.PropertyDefaultSetter<T> setter);
+			public Invercargill.Mapping.PropertyMappingBuilder<T> when_undefined (owned Invercargill.Mapping.PropertyDefaultSetter<T> setter);
+		}
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public class ValueMapper<TNative,TElement> : GLib.Object, Invercargill.Mapping.Mapper<TNative,TElement> {
+			public static Invercargill.Mapping.ValueMapper<TNative,TElement> build_for<TNative,TElement> (GLib.Func<Invercargill.Mapping.ValueMapperBuilder<TNative,TElement>> func);
+		}
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public class ValueMapperBuilder<TNative,TElement> {
+			public ValueMapperBuilder ();
+			public Invercargill.Mapping.ValueMapper<TNative,TElement> build ();
+			public Invercargill.Mapping.ValueMapperBuilder<TNative,TElement> map (TNative native, TElement element);
+			public Invercargill.Mapping.ValueMapperBuilder<TNative,TElement> with_element_equality (Invercargill.EqualityDelegate<TNative> eq, Invercargill.HashDelegate<TNative>? hash = null);
+			public Invercargill.Mapping.ValueMapperBuilder<TNative,TElement> with_native_equality (Invercargill.EqualityDelegate<TNative> eq, Invercargill.HashDelegate<TNative>? hash = null);
+		}
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public interface Mapper<TNative,TElement> : GLib.Object {
+			public abstract TElement map_from (TNative native) throws GLib.Error;
+			public abstract TNative materialise (TElement element) throws GLib.Error;
+		}
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public delegate T ObjectConstructor<T> ();
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public delegate void PropertyDefaultSetter<TClass> (TClass object);
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public delegate TProp PropertyGetter<TClass,TProp> (TClass object) throws GLib.Error;
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public delegate TOut PropertyGetterTransformer<TIn,TOut> (TIn object);
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public delegate bool PropertyPredicate<TClass> (TClass object);
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public delegate void PropertySetter<TClass,TProp> (TClass object, TProp value) throws GLib.Error;
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public delegate TOut PropertySetterTransformer<TIn,TOut> (TIn object) throws GLib.Error;
+	}
+	namespace Modifiers {
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public class Cache<T> : Invercargill.Enumerable<T> {
+			public Cache (Invercargill.Enumerable<T> inner);
+			public override Invercargill.EnumerableInfo get_info ();
+			public override Invercargill.Tracker<T> get_tracker ();
+			public override uint? peek_count ();
+		}
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public class Chunk<T> : Invercargill.Enumerable<Invercargill.Enumerable<T>> {
+			public Chunk (Invercargill.Enumerable<T> input, uint chunk_size);
+			public override Invercargill.EnumerableInfo get_info ();
+			public override Invercargill.Tracker<Invercargill.Enumerable<T>> get_tracker ();
+			public override uint? peek_count ();
+		}
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public class Concat<T> : Invercargill.Enumerable<T> {
+			public Concat (Invercargill.Enumerable<T> first, Invercargill.Enumerable<T> second);
+			public override Invercargill.EnumerableInfo get_info ();
+			public override Invercargill.Tracker<T> get_tracker ();
+			public override uint? peek_count ();
+		}
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public class Cycle<T> : Invercargill.Enumerable<T> {
+			public Cycle (Invercargill.Enumerable<T> input, uint cycles = -1);
+			public override Invercargill.EnumerableInfo get_info ();
+			public override Invercargill.Tracker<T> get_tracker ();
+			public override uint? peek_count ();
+		}
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public class Difference<T,TKey> : Invercargill.Enumerable<T> {
+			public Difference (Invercargill.Enumerable<T> first, Invercargill.Enumerable<T> second, owned Invercargill.TransformDelegate<T,TKey> key_selector, owned Invercargill.HashDelegate<TKey>? key_hasher = null, owned Invercargill.EqualityDelegate<TKey>? key_equator = null);
+			public override Invercargill.EnumerableInfo get_info ();
+			public override Invercargill.Tracker<T> get_tracker ();
+			public override uint? peek_count ();
+		}
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public class Filter<T> : Invercargill.Enumerable<T> {
+			public Filter (Invercargill.Enumerable<T> input, owned Invercargill.PredicateDelegate<T> func);
+			public override Invercargill.EnumerableInfo get_info ();
+			public override Invercargill.Tracker<T> get_tracker ();
+			public override uint? peek_count ();
+		}
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public class FilterTransform<TIn,TOut> : Invercargill.Enumerable<TOut> {
+			public FilterTransform (Invercargill.Enumerable<TIn> input, owned Invercargill.FilterTransformDelegate<TIn,TOut> func);
+			public override Invercargill.EnumerableInfo get_info ();
+			public override Invercargill.Tracker<TOut> get_tracker ();
+			public override uint? peek_count ();
+		}
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public class Fork<T,TOut> : Invercargill.Enumerable<TOut> {
+			public Fork (Invercargill.Enumerable<T> input, owned Invercargill.TransformDelegate<T,TOut> fork1, owned Invercargill.TransformDelegate<T,TOut> fork2);
+			public override Invercargill.EnumerableInfo get_info ();
+			public override Invercargill.Tracker<TOut> get_tracker ();
+			public override uint? peek_count ();
+		}
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public class From<T> : Invercargill.Enumerable<T> {
+			public From (Invercargill.Enumerable<T> input, owned Invercargill.PredicateDelegate<T> func);
+			public override Invercargill.EnumerableInfo get_info ();
+			public override Invercargill.Tracker<T> get_tracker ();
+			public override uint? peek_count ();
+		}
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public class GroupSequential<T,TKey> : Invercargill.Enumerable<Invercargill.Grouping<TKey,T>> {
+			public GroupSequential (Invercargill.Enumerable<T> input, owned Invercargill.TransformDelegate<T,TKey> key_selector, owned Invercargill.EqualityDelegate<T>? equal_func = null);
+			public override Invercargill.EnumerableInfo get_info ();
+			public override Invercargill.Tracker<Invercargill.Grouping<TKey,T>> get_tracker ();
+			public override uint? peek_count ();
+		}
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public class Interleave<T> : Invercargill.Enumerable<T> {
+			public Interleave (Invercargill.Enumerable<T> en1, Invercargill.Enumerable<T> en2);
+			public override Invercargill.EnumerableInfo get_info ();
+			public override Invercargill.Tracker<T> get_tracker ();
+			public override uint? peek_count ();
+		}
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public class Intersect<T,TKey> : Invercargill.Enumerable<T> {
+			public Intersect (Invercargill.Enumerable<T> first, Invercargill.Enumerable<T> second, owned Invercargill.TransformDelegate<T,TKey> key_selector, owned Invercargill.HashDelegate<TKey>? key_hasher = null, owned Invercargill.EqualityDelegate<TKey>? key_equator = null);
+			public override Invercargill.EnumerableInfo get_info ();
+			public override Invercargill.Tracker<T> get_tracker ();
+			public override uint? peek_count ();
+		}
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public class MergeQuery<T> : Invercargill.Enumerable<T> {
+			public MergeQuery (Invercargill.Enumerable<Invercargill.Enumerable<T>> input);
+			public override Invercargill.EnumerableInfo get_info ();
+			public override Invercargill.Tracker<T> get_tracker ();
+			public override bool iterate_if (Invercargill.PredicateDelegate<T> handler);
+			public override uint? peek_count ();
+		}
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public class Order<T,TKey> : Invercargill.Enumerable<T> {
+			public Order (Invercargill.Enumerable<T> input, owned Invercargill.TransformDelegate<T,TKey> key_selector, owned Invercargill.CompareDelegate<T>? comparitor = null, bool reversed = false);
+			public override Invercargill.EnumerableInfo get_info ();
+			public override Invercargill.Tracker<T> get_tracker ();
+			public override uint? peek_count ();
+		}
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public class Padding<T> : Invercargill.Enumerable<T> {
+			public Padding (Invercargill.Enumerable<T> input, T pad_item, uint min_length);
+			public override Invercargill.EnumerableInfo get_info ();
+			public override Invercargill.Tracker<T> get_tracker ();
+			public override uint? peek_count ();
+		}
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public class ParallelFilter<T> : Invercargill.Enumerable<T> {
+			public ParallelFilter (Invercargill.Enumerable<T> input, owned Invercargill.PredicateDelegate<T> predicate, int workers);
+			public override Invercargill.EnumerableInfo get_info ();
+			public override Invercargill.Tracker<T> get_tracker ();
+			public override uint? peek_count ();
+		}
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public class ParallelTransform<TIn,TOut> : Invercargill.Enumerable<TOut> {
+			public ParallelTransform (Invercargill.Enumerable<TIn> input, owned Invercargill.TransformDelegate<TIn,TOut> transform, int workers);
+			public override Invercargill.EnumerableInfo get_info ();
+			public override Invercargill.Tracker<TOut> get_tracker ();
+			public override uint? peek_count ();
+		}
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public class Position<T> : Invercargill.Enumerable<Invercargill.PositionItemPair<T>> {
+			public Position (Invercargill.Enumerable<T> input);
+			public override Invercargill.EnumerableInfo get_info ();
+			public override Invercargill.Tracker<Invercargill.PositionItemPair<T>> get_tracker ();
+			public override uint? peek_count ();
+		}
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public class Reverse<T> : Invercargill.Enumerable<T> {
+			public Reverse (Invercargill.Enumerable<T> input);
+			public override Invercargill.EnumerableInfo get_info ();
+			public override Invercargill.Tracker<T> get_tracker ();
+			public override uint? peek_count ();
+		}
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public class Scanner<TIn,TOut> : Invercargill.Enumerable<TOut> {
+			public Scanner (Invercargill.Enumerable<TIn> input, TOut initial, owned Invercargill.AggregateDelegate<TOut,TIn> aggregating_func);
+			public override Invercargill.EnumerableInfo get_info ();
+			public override Invercargill.Tracker<TOut> get_tracker ();
+			public override uint? peek_count ();
+		}
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public class Sealed<T> : Invercargill.Proxy<T> {
+			public Sealed (Invercargill.Enumerable<T> source);
+		}
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public class Skip<T> : Invercargill.Enumerable<T> {
+			public Skip (Invercargill.Enumerable<T> input, uint skip);
+			public override Invercargill.EnumerableInfo get_info ();
+			public override Invercargill.Tracker<T> get_tracker ();
+			public override bool iterate_if (Invercargill.PredicateDelegate<T> handler);
+			public override uint? peek_count ();
+		}
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public class SkipLast<T> : Invercargill.Enumerable<T> {
+			public SkipLast (Invercargill.Enumerable<T> input, uint skip);
+			public override Invercargill.EnumerableInfo get_info ();
+			public override Invercargill.Tracker<T> get_tracker ();
+			public override uint? peek_count ();
+		}
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public class Sort<T> : Invercargill.Enumerable<T> {
+			public Sort (Invercargill.Enumerable<T> input, owned Invercargill.CompareDelegate<T> compare);
+			public override Invercargill.EnumerableInfo get_info ();
+			public override Invercargill.Tracker<T> get_tracker ();
+			public override uint? peek_count ();
+		}
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public class SymmetricDifference<T,TKey> : Invercargill.Enumerable<T> {
+			public SymmetricDifference (Invercargill.Enumerable<T> first, Invercargill.Enumerable<T> second, owned Invercargill.TransformDelegate<T,TKey> key_selector, owned Invercargill.HashDelegate<TKey>? key_hasher = null, owned Invercargill.EqualityDelegate<TKey>? key_equator = null);
+			public override Invercargill.EnumerableInfo get_info ();
+			public override Invercargill.Tracker<T> get_tracker ();
+			public override uint? peek_count ();
+		}
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public class Take<T> : Invercargill.Enumerable<T> {
+			public Take (Invercargill.Enumerable<T> input, uint count);
+			public override Invercargill.EnumerableInfo get_info ();
+			public override Invercargill.Tracker<T> get_tracker ();
+			public override uint? peek_count ();
+		}
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public class TakeLast<T> : Invercargill.Enumerable<T> {
+			public TakeLast (Invercargill.Enumerable<T> input, uint count);
+			public override Invercargill.EnumerableInfo get_info ();
+			public override Invercargill.Tracker<T> get_tracker ();
+			public override uint? peek_count ();
+		}
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public class Transform<TIn,TOut> : Invercargill.Enumerable<TOut> {
+			public Transform (Invercargill.Enumerable<TIn> input, owned Invercargill.TransformDelegate<TIn,TOut> transform);
+			public override Invercargill.EnumerableInfo get_info ();
+			public override Invercargill.Tracker<TOut> get_tracker ();
+			public override uint? peek_count ();
+		}
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public class Union<T,TKey> : Invercargill.Enumerable<T> {
+			public Union (Invercargill.Enumerable<T> first, Invercargill.Enumerable<T> second, owned Invercargill.TransformDelegate<T,TKey> key_selector, owned Invercargill.HashDelegate<TKey>? key_hasher = null, owned Invercargill.EqualityDelegate<TKey>? key_equator = null);
+			public override Invercargill.EnumerableInfo get_info ();
+			public override Invercargill.Tracker<T> get_tracker ();
+			public override uint? peek_count ();
+		}
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public class Unique<T,TProp> : Invercargill.Enumerable<T> {
+			public Unique (Invercargill.Enumerable<T> input, owned Invercargill.TransformDelegate<T,TProp> selector, owned Invercargill.EqualityDelegate<TProp> compare);
+			public override Invercargill.EnumerableInfo get_info ();
+			public override Invercargill.Tracker<T> get_tracker ();
+			public override uint? peek_count ();
+		}
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public class Until<T> : Invercargill.Enumerable<T> {
+			public Until (Invercargill.Enumerable<T> input, owned Invercargill.PredicateDelegate<T> func);
+			public override Invercargill.EnumerableInfo get_info ();
+			public override Invercargill.Tracker<T> get_tracker ();
+			public override uint? peek_count ();
+		}
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public class Window<T> : Invercargill.Enumerable<Invercargill.Enumerable<T>> {
+			public Window (Invercargill.Enumerable<T> input, uint window_size);
+			public override Invercargill.EnumerableInfo get_info ();
+			public override Invercargill.Tracker<Invercargill.Enumerable<T>> get_tracker ();
+			public override uint? peek_count ();
+		}
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public class Zip<TFirst,TSecond,TOut> : Invercargill.Enumerable<TOut> {
+			public Zip (Invercargill.Enumerable<TFirst> en1, Invercargill.Enumerable<TSecond> en2, owned Invercargill.ZipperTransformDelegate<TFirst,TSecond,TOut> func);
+			public override Invercargill.EnumerableInfo get_info ();
+			public override Invercargill.Tracker<TOut> get_tracker ();
+			public override uint? peek_count ();
+		}
+	}
+	namespace Operators {
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public static Invercargill.CompareDelegate<T> comparison<T> ();
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public static Invercargill.EqualityDelegate<T> equality<T> ();
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public static Invercargill.HashDelegate<T> hash<T> ();
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public static Invercargill.StringifyDelegate<T> stringify<T> ();
+	}
+	namespace Wrap {
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public static Invercargill.ReadOnlyAddressable<T> array<T> (T[] input);
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public static Invercargill.ReadOnlyAddressableBytes base64_string (string input);
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public static Invercargill.ReadOnlyAddressableBytes byte_array (uint8[] input);
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public static Invercargill.ReadOnlyAddressableBytes bytes (GLib.Bytes input);
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public static Invercargill.Lot<T> generic_array<T> (owned GLib.GenericArray<T> input);
+	}
+	namespace Wrappers {
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public class Array<T> : Invercargill.Enumerable<T>, Invercargill.Lot<T>, Invercargill.ImmutableLot<T>, Invercargill.ReadOnlyAddressable<T> {
+			public Array (T[] input);
+			public override Invercargill.EnumerableInfo get_info ();
+			public override Invercargill.Tracker<T> get_tracker ();
+			public override uint? peek_count ();
+		}
+		[CCode (cheader_filename = "invercargill-1.h")]
+		public class GenericArray<T> : Invercargill.Enumerable<T>, Invercargill.Lot<T> {
+			public GenericArray (owned GLib.GenericArray<T> input);
+			public override Invercargill.EnumerableInfo get_info ();
+			public override Invercargill.Tracker<T> get_tracker ();
+			public override uint? peek_count ();
+		}
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public class AddressableTracker<T> : Invercargill.Tracker<T> {
+		public AddressableTracker (Invercargill.ReadOnlyAddressable<T> addressable);
+		public override T get_next ();
+		public override bool has_next ();
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public class AdvanceTracker<T> : Invercargill.Tracker<T> {
+		public delegate bool GetNextDelegate<T> (out T item);
+		public AdvanceTracker (owned Invercargill.AdvanceTracker.GetNextDelegate<T> get_next_delegate);
+		public override T get_next ();
+		public override bool has_next ();
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public class AssertingLambdaTracker<T> : Invercargill.Tracker<T> {
+		public delegate T GetNextDelegate<T> () throws GLib.Error;
+		public delegate bool HasNextDelegate () throws GLib.Error;
+		public AssertingLambdaTracker (owned Invercargill.AssertingLambdaTracker.HasNextDelegate has_next_delegate, owned Invercargill.AssertingLambdaTracker.GetNextDelegate<T> get_next_delegate);
+		public override T get_next ();
+		public override bool has_next ();
+	}
+	[CCode (cheader_filename = "invercargill-1.h", copy_function = "invercargill_attempt_copy")]
+	[Compact]
+	[Immutable]
+	public class Attempt<T> {
+		public GLib.Error? error;
+		public T result;
+		public bool success;
+		public Attempt (Invercargill.AttemptDelegate<T> func);
+		public Invercargill.Attempt<T> copy ();
+		public Attempt.successful (T result);
+		public Attempt.unsuccessful (GLib.Error error);
+		public T unwrap () throws GLib.Error;
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public class Attempts<T> : Invercargill.StickyProxyPromotion<Invercargill.Attempts<T>,Invercargill.Attempt<T>> {
+		public Attempts ();
+		protected override Invercargill.Attempts<T> adhere (Invercargill.Enumerable<Invercargill.Attempt<T>> enumerable);
+		public new TOut aggregate<TOut> (TOut initial, Invercargill.AggregateDelegate<TOut,T> aggregate_func) throws GLib.Error;
+		public new bool all (Invercargill.PredicateDelegate<T> predicate) throws GLib.Error;
+		public new bool any (Invercargill.PredicateDelegate<T> predicate = (i) =>true) throws GLib.Error;
+		public new Invercargill.Attempts<TOut> attempt_map_with<TOut> (Invercargill.Mapping.Mapper<TOut,T> mapper);
+		public new Invercargill.Attempts<TOut> attempt_select<TOut> (owned Invercargill.AttemptTransformDelegate<T,TOut> transform);
+		public new Invercargill.Attempts<TOut> attempt_select_nested<TOut> (owned Invercargill.AttemptTransformDelegate<T,Invercargill.Enumerable<Invercargill.Attempt<TOut>>> transform);
+		public override bool can_wrap (GLib.Type element_type);
+		public new Invercargill.Attempts<TOut> cast<TOut> ();
+		public new Invercargill.Attempts<T> concat (Invercargill.Enumerable<Invercargill.Attempt<T>> other);
+		public new bool contains (T item) throws GLib.Error;
+		public new Invercargill.Attempts<Invercargill.SelectionContext<T,TOut>> contextualised_select<TOut> (owned Invercargill.TransformDelegate<T,TOut> transform);
+		public bool fully_successful ();
+		public new void iterate (Invercargill.ItemDelegate<T> handler) throws GLib.Error;
+		public new bool iterate_if (Invercargill.PredicateDelegate<T> handler) throws GLib.Error;
+		public new T max (Invercargill.TransformDelegate<T,int> int_delegate) throws GLib.Error;
+		public new T min (Invercargill.TransformDelegate<T,int> int_delegate) throws GLib.Error;
+		public new bool no (Invercargill.PredicateDelegate<T>? predicate = null) throws GLib.Error;
+		protected override Invercargill.Attempts<T> passthrough ();
+		public new Invercargill.Attempts<TOut> select<TOut> (owned Invercargill.TransformDelegate<T,TOut> transform);
+		public new Invercargill.Attempts<TOut> select_many<TOut> (owned Invercargill.TransformDelegate<T,Invercargill.Enumerable<TOut>> transform);
+		public new Invercargill.DataStructures.Dictionary<TKey,TValue> select_to_dictionary<TKey,TValue> (Invercargill.TransformDelegate<T,TKey> key_selecter, Invercargill.TransformDelegate<T,TValue> value_selecter, Invercargill.HashDelegate<TKey>? key_hash_func = null, Invercargill.EqualityDelegate<TKey>? key_equal_func = null) throws GLib.Error;
+		public new Invercargill.Attempts<TOut> select_where<TOut> (owned Invercargill.FilterTransformDelegate<T,TOut> transform);
+		public new T[] to_array () throws GLib.Error;
+		public new Invercargill.DataStructures.Dictionary<TKey,T> to_dictionary<TKey> (Invercargill.TransformDelegate<T,TKey> key_selecter, Invercargill.HashDelegate<TKey>? key_hash_func = null, Invercargill.EqualityDelegate<TKey>? key_equal_func = null) throws GLib.Error;
+		public new Invercargill.Elements to_elements () throws GLib.Error;
+		public new GLib.Object[] to_object_array () throws GLib.Error;
+		public new Invercargill.DataStructures.Series<T> to_series () throws GLib.Error;
+		public new Invercargill.Set<T> to_set (Invercargill.HashDelegate<T>? hash_func = null, Invercargill.EqualityDelegate<T>? equal_func = null) throws GLib.Error;
+		public new Invercargill.DataStructures.Vector<T> to_vector () throws GLib.Error;
+		public new Invercargill.Attempts<T> where (owned Invercargill.PredicateDelegate<T> predicate);
+		public override Invercargill.Attempts<T> wrap (Invercargill.Enumerable<Invercargill.Attempt<T>> enumerable);
+		public GLib.Type attempt_element_type { get; }
+		public Invercargill.Enumerable<GLib.Error> errors { get; private set; }
+		public Invercargill.Enumerable<T> results { get; private set; }
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public class ByteComposition : Invercargill.Composition<uint8>, Invercargill.Equatable<Invercargill.Enumerable<uint8>>, Invercargill.Hashable, Invercargill.Sticky<Invercargill.BinaryData,uint8>, Invercargill.BinaryData {
+		public ByteComposition ();
+		public void append_base64 (string str);
+		public void append_byte_array (uint8[] data);
+		public void append_bytes (GLib.Bytes data);
+		public void append_hex (string str);
+		public void append_int16 (int16 value);
+		public void append_int32 (int32 value);
+		public void append_int64 (int64 value);
+		public void append_int8 (int8 value);
+		public void append_string (string str);
+		public void append_uint16 (uint16 value);
+		public void append_uint32 (uint32 value);
+		public void append_uint64 (uint64 value);
+		public void append_uint8 (uint8 value);
+		public ByteComposition.from_base64 (string data);
+		public ByteComposition.from_byte_array (uint8[] data);
+		public ByteComposition.from_bytes (GLib.Bytes data);
+		public ByteComposition.from_enumerable (Invercargill.Enumerable<uint8> data);
+		public ByteComposition.from_hex (string data);
+		public void prepend_base64 (string str);
+		public void prepend_byte_array (uint8[] data);
+		public void prepend_bytes (GLib.Bytes data);
+		public void prepend_hex (string str);
+		public void prepend_int16 (int16 value);
+		public void prepend_int32 (int32 value);
+		public void prepend_int64 (int64 value);
+		public void prepend_int8 (int8 value);
+		public void prepend_string (string str);
+		public void prepend_uint16 (uint16 value);
+		public void prepend_uint32 (uint32 value);
+		public void prepend_uint64 (uint64 value);
+		public void prepend_uint8 (uint8 value);
+		public bool read_in (GLib.Bytes? data, ref size_t amount) throws GLib.Error;
+		public Invercargill.Endianness endianness { get; set; }
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public class Composition<T> : Invercargill.Enumerable<T> {
+		protected Invercargill.DataStructures.Series<Invercargill.Enumerable<T>> enumerables;
+		public Composition ();
+		public void append (Invercargill.Enumerable<T> items);
+		public void append_all (Invercargill.Enumerable<Invercargill.Enumerable<T>> items);
+		public void append_item (T item);
+		public void clear ();
+		public override Invercargill.EnumerableInfo get_info ();
+		public override Invercargill.Tracker<T> get_tracker ();
+		public override uint? peek_count ();
+		public void prepend (Invercargill.Enumerable<T> items);
+		public void prepend_all (Invercargill.Enumerable<Invercargill.Enumerable<T>> items);
+		public void prepend_item (T item);
+		public void remove_first_where (owned Invercargill.PredicateDelegate<T> predicate);
+		public void remove_where (owned Invercargill.PredicateDelegate<T> predicate);
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public class Doubles : Invercargill.Numbers<Invercargill.Doubles,double?> {
+		public Doubles ();
+		protected override double? add (double? a, double? b);
+		protected override Invercargill.Doubles adhere (Invercargill.Enumerable<double?> enumerable);
+		public override bool can_wrap (GLib.Type element_type);
+		protected override double? convert (uint i);
+		protected override double? divide (double? a, double? b);
+		protected override bool equal_to (double? a, double? b);
+		protected override bool greater_than (double? a, double? b);
+		protected override bool less_than (double? a, double? b);
+		protected override double? multiply (double? a, double? b);
+		protected override Invercargill.Doubles passthrough ();
+		protected override double? subtract (double? a, double? b);
+		protected override double? zero ();
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public abstract class Enumerable<T> : GLib.Object, Invercargill.Equatable<Invercargill.Enumerable<T>> {
+		protected Enumerable ();
+		public virtual Invercargill.Enumerable<T> act (Invercargill.ItemDelegate<T> handler);
+		public virtual TOut aggregate<TOut> (TOut initial, Invercargill.AggregateDelegate<TOut,T> aggregate_func);
+		public virtual bool all (Invercargill.PredicateDelegate<T> predicate);
+		public virtual bool any (Invercargill.PredicateDelegate<T>? predicate = null);
+		public virtual Invercargill.Enumerable<T> as_enumerable ();
+		public virtual TPromotion assert_promotion<TPromotion> ();
+		public virtual Invercargill.Attempts<Invercargill.SelectionContext<T,TOut>> attempt_contextualised_select<TOut> (owned Invercargill.AttemptTransformDelegate<T,TOut> transform);
+		public virtual Invercargill.Attempts<TOut> attempt_map_with<TOut> (Invercargill.Mapping.Mapper<TOut,T> mapper);
+		public virtual Invercargill.Attempts<TOut> attempt_select<TOut> (owned Invercargill.AttemptTransformDelegate<T,TOut> transform);
+		public virtual Invercargill.Attempts<TOut> attempt_select_nested<TOut> (owned Invercargill.AttemptTransformDelegate<T,Invercargill.Enumerable<Invercargill.Attempt<TOut>>> transform);
+		public virtual Invercargill.Attempts<T> attempt_where (owned Invercargill.AttemptPredicate<T> predicate);
+		public virtual Invercargill.Enumerable<T> cache ();
+		public virtual Invercargill.Enumerable<TOut> cast<TOut> ();
+		public virtual Invercargill.Enumerable<Invercargill.Enumerable<T>> chunk (uint chunk_size);
+		public virtual Invercargill.Enumerable<T> combine (Invercargill.Enumerable<T> other, owned Invercargill.HashDelegate<T>? hash_func = null, owned Invercargill.EqualityDelegate<T>? equal_func = null);
+		public virtual Invercargill.Enumerable<T> combine_by<TKey> (Invercargill.Enumerable<T> other, owned Invercargill.TransformDelegate<T,TKey> key_selector, owned Invercargill.HashDelegate<TKey>? hash_func = null, owned Invercargill.EqualityDelegate<TKey>? equal_func = null);
+		public virtual Invercargill.Enumerable<T> common (Invercargill.Enumerable<T> other, owned Invercargill.HashDelegate<T>? hash_func = null, owned Invercargill.EqualityDelegate<T>? equal_func = null);
+		public virtual Invercargill.Enumerable<T> common_by<TKey> (Invercargill.Enumerable<T> other, owned Invercargill.TransformDelegate<T,TKey> key_selector, owned Invercargill.HashDelegate<TKey>? hash_func = null, owned Invercargill.EqualityDelegate<TKey>? equal_func = null);
+		public virtual Invercargill.Enumerable<T> concat (Invercargill.Enumerable<T> other);
+		public virtual bool contains (T item, Invercargill.EqualityDelegate<T>? equator = null);
+		public virtual Invercargill.Enumerable<Invercargill.SelectionContext<T,TOut>> contextualised_select<TOut> (owned Invercargill.TransformDelegate<T,TOut> transform);
+		public virtual uint count (Invercargill.PredicateDelegate<T>? predicate = null);
+		public virtual ulong count_ulong (Invercargill.PredicateDelegate<T>? predicate = null);
+		public virtual Invercargill.Enumerable<T> cycle (uint cycles = -1);
+		public virtual void debug_dump (string additional_message = "", Invercargill.StringifyDelegate<T>? stringifier = null, Invercargill.DebugOutputDelegate? output_func = null, bool formatting = true);
+		public virtual Invercargill.Enumerable<T> debug_trace (string additional_message = "", owned Invercargill.StringifyDelegate<T>? stringifier = null, owned Invercargill.DebugOutputDelegate? output_func = null, bool formatting = true);
+		public virtual Invercargill.Enumerable<T> debug_type (string additional_message = "", Invercargill.DebugOutputDelegate? output_func = null, bool formatting = true);
+		public virtual Invercargill.Enumerable<T> distinct (owned Invercargill.EqualityDelegate<T>? comparison = null);
+		public virtual Invercargill.Enumerable<T> distinct_by<TProp> (owned Invercargill.TransformDelegate<T,TProp> property_selector, owned Invercargill.EqualityDelegate<TProp>? property_equality);
+		public virtual T element_at (uint index) throws Invercargill.SequenceError;
+		public virtual T element_at_or_default (uint index);
+		public virtual bool equals (Invercargill.Enumerable<T> other);
+		public virtual Invercargill.Enumerable<T> exclude (Invercargill.Enumerable<T> other, owned Invercargill.HashDelegate<T>? hash_func = null, owned Invercargill.EqualityDelegate<T>? equal_func = null);
+		public virtual Invercargill.Enumerable<T> exclude_by<TKey> (Invercargill.Enumerable<T> other, owned Invercargill.TransformDelegate<T,TKey> key_selector, owned Invercargill.HashDelegate<TKey>? hash_func = null, owned Invercargill.EqualityDelegate<TKey>? equal_func = null);
+		public virtual T first (owned Invercargill.PredicateDelegate<T>? predicate = null) throws Invercargill.SequenceError;
+		public virtual T first_or_default (owned Invercargill.PredicateDelegate<T>? predicate = null);
+		public virtual Invercargill.Enumerable<TOut> fork<TOut> (owned Invercargill.TransformDelegate<T,TOut> fork1, owned Invercargill.TransformDelegate<T,TOut> fork2);
+		public virtual Invercargill.Enumerable<TOut> fork_many<TOut> (owned Invercargill.TransformDelegate<T,Invercargill.Enumerable<TOut>> fork1, owned Invercargill.TransformDelegate<T,Invercargill.Enumerable<TOut>> fork2);
+		public virtual Invercargill.Enumerable<T> from (owned Invercargill.PredicateDelegate<T> predicate);
+		public abstract Invercargill.EnumerableInfo get_info ();
+		public abstract Invercargill.Tracker<T> get_tracker ();
+		public virtual Invercargill.Enumerable<Invercargill.Grouping<TKey,T>> group_adjacent_by<TKey> (owned Invercargill.TransformDelegate<T,TKey> key_selector, owned Invercargill.EqualityDelegate<TKey>? key_equality = null);
+		public virtual Invercargill.Enumerable<Invercargill.Grouping<TKey,T>> group_by<TKey> (owned Invercargill.TransformDelegate<T,TKey> key_selector, owned Invercargill.EqualityDelegate<TKey>? key_equality = null);
+		public virtual Invercargill.Enumerable<Invercargill.KeyCountPair<T>> histogram (owned Invercargill.EqualityDelegate<T>? key_equality = null);
+		public virtual Invercargill.Enumerable<Invercargill.KeyCountPair<TKey>> histogram_by<TKey> (owned Invercargill.TransformDelegate<T,TKey> key_selector, owned Invercargill.EqualityDelegate<TKey>? key_equality = null);
+		public virtual Invercargill.Enumerable<T> interleave (Invercargill.Enumerable<T> other);
+		public virtual void iterate (Invercargill.ItemDelegate<T>? handler = null);
+		public virtual bool iterate_if (Invercargill.PredicateDelegate<T> handler);
+		public virtual Invercargill.Tracker<T> iterator ();
+		public virtual T last (owned Invercargill.PredicateDelegate<T>? predicate = null) throws Invercargill.SequenceError;
+		public virtual T last_or_default (owned Invercargill.PredicateDelegate<T>? predicate = null);
+		public virtual bool matches (Invercargill.Enumerable<T> other, Invercargill.EqualityDelegate<T>? compare_func = null);
+		public virtual bool matches_by<TProp> (Invercargill.Enumerable<T> other, Invercargill.TransformDelegate<T,TProp> property_selector, Invercargill.EqualityDelegate<TProp>? compare_func = null);
+		public virtual T max (Invercargill.TransformDelegate<T,int> int_delegate);
+		public virtual T min (Invercargill.TransformDelegate<T,int> int_delegate);
+		public virtual bool no (Invercargill.PredicateDelegate<T>? predicate = null);
+		public virtual Invercargill.Enumerable<T> non_common (Invercargill.Enumerable<T> other, owned Invercargill.HashDelegate<T>? hash_func = null, owned Invercargill.EqualityDelegate<T>? equal_func = null);
+		public virtual Invercargill.Enumerable<T> non_common_by<TKey> (Invercargill.Enumerable<T> other, owned Invercargill.TransformDelegate<T,TKey> key_selector, owned Invercargill.HashDelegate<TKey>? hash_func = null, owned Invercargill.EqualityDelegate<TKey>? equal_func = null);
+		public virtual Invercargill.Enumerable<TOut> of_type<TOut> ();
+		public virtual Invercargill.Enumerable<T> order_by<TKey> (owned Invercargill.TransformDelegate<T,TKey> key_selector, owned Invercargill.CompareDelegate<TKey>? comparitor = null);
+		public virtual Invercargill.Enumerable<T> order_by_complex (Invercargill.ItemDelegate<Invercargill.OrderConfiguration<T>> config);
+		public virtual Invercargill.Enumerable<T> order_by_descending<TKey> (owned Invercargill.TransformDelegate<T,TKey> key_selector, owned Invercargill.CompareDelegate<TKey>? comparitor = null);
+		public virtual Invercargill.Enumerable<T> pad_end (uint minimum_length, T pad_item);
+		public virtual Invercargill.Enumerable<T> pad_start (uint minimum_length, T pad_item);
+		public virtual Invercargill.Enumerable<Invercargill.Pair<T,TOther>> pair_up<TOther> (Invercargill.Enumerable<TOther> other);
+		public virtual Invercargill.Enumerable<Invercargill.SelectionContext<T,TOut>> parallel_contextualised_select<TOut> (owned Invercargill.TransformDelegate<T,TOut> transform);
+		public virtual void parallel_iterate (Invercargill.ItemDelegate<T> handler, uint workers = 0);
+		public virtual Invercargill.Enumerable<TOut> parallel_select<TOut> (owned Invercargill.TransformDelegate<T,TOut> transform, uint workers = 0);
+		public virtual Invercargill.Enumerable<T> parallel_where<T> (owned Invercargill.PredicateDelegate<T> predicate, uint workers = 0);
+		public virtual Invercargill.Partition<T> partition (Invercargill.PredicateDelegate<T> test);
+		public abstract uint? peek_count ();
+		public virtual Invercargill.Enumerable<T> prefix_with (T item, uint times = 1);
+		public virtual TPromotion promote_to<TPromotion> () throws Invercargill.PromotionError;
+		public virtual Invercargill.Enumerable<T> reverse ();
+		public virtual Invercargill.Enumerable<TOut> scan<TOut> (TOut initial_value, owned Invercargill.AggregateDelegate<T,TOut> scanning_delegate);
+		public virtual Invercargill.Enumerable<T> seal ();
+		public virtual Invercargill.Enumerable<TOut> select<TOut> (owned Invercargill.TransformDelegate<T,TOut> transform);
+		public virtual Invercargill.Enumerable<TOut> select_many<TOut> (owned Invercargill.TransformDelegate<T,Invercargill.Enumerable<TOut>> transform);
+		public virtual Invercargill.Enumerable<Invercargill.Pair<TFirst,TSecond>> select_pairs<TFirst,TSecond> (owned Invercargill.TransformDelegate<T,TFirst> transform1, owned Invercargill.TransformDelegate<T,TSecond> transform2);
+		public virtual Invercargill.DataStructures.Dictionary<TKey,TValue> select_to_dictionary<TKey,TValue> (Invercargill.TransformDelegate<T,TKey> key_selecter, Invercargill.TransformDelegate<T,TValue> value_selecter, Invercargill.HashDelegate<TKey>? key_hash_func = null, Invercargill.EqualityDelegate<TKey>? key_equal_func = null);
+		public virtual Invercargill.Enumerable<TOut> select_where<TOut> (owned Invercargill.FilterTransformDelegate<T,TOut> transform);
+		public virtual T single (owned Invercargill.PredicateDelegate<T>? predicate = null) throws Invercargill.SequenceError;
+		public virtual T single_or_default (owned Invercargill.PredicateDelegate<T>? predicate = null) throws Invercargill.SequenceError;
+		public virtual Invercargill.Enumerable<T> skip (uint count);
+		public virtual Invercargill.Enumerable<T> skip_last (uint count);
+		public virtual Invercargill.Enumerable<T> sort (owned Invercargill.CompareDelegate<T> compare);
+		public virtual Invercargill.Enumerable<T> suffix_with (T item, uint times = 1);
+		public virtual Invercargill.Enumerable<T> take (uint count);
+		public virtual Invercargill.Enumerable<T> take_last (uint count);
+		public virtual T[] to_array ();
+		public virtual Invercargill.DataStructures.Buffer<T> to_buffer ();
+		public virtual Invercargill.DataStructures.Dictionary<TKey,T> to_dictionary<TKey> (Invercargill.TransformDelegate<T,TKey> key_selecter, Invercargill.HashDelegate<TKey>? key_hash_func = null, Invercargill.EqualityDelegate<TKey>? key_equal_func = null);
+		public virtual Invercargill.Elements to_elements ();
+		public virtual Invercargill.DataStructures.HashSet<T> to_hash_set (Invercargill.HashDelegate<T>? hash_func = null, Invercargill.EqualityDelegate<T>? equal_func = null);
+		public virtual Invercargill.DataStructures.ImmutableBuffer<T> to_immutable_buffer ();
+		public virtual GLib.Object[] to_object_array () throws Invercargill.SequenceError;
+		public virtual Invercargill.DataStructures.RingBuffer<T> to_ring_buffer (uint? size = null);
+		public virtual Invercargill.DataStructures.Series<T> to_series ();
+		public virtual string to_string (Invercargill.StringifyDelegate<T>? stringifier = null, string seperator = "");
+		public virtual Invercargill.DataStructures.Vector<T> to_vector ();
+		public virtual Invercargill.Enumerable<T> until (owned Invercargill.PredicateDelegate<T> predicate);
+		public virtual Invercargill.Enumerable<T> where (owned Invercargill.PredicateDelegate<T> predicate);
+		public virtual Invercargill.Enumerable<Invercargill.Enumerable<T>> window (uint window_size);
+		public virtual Invercargill.Enumerable<Invercargill.PositionItemPair<T>> with_positions ();
+		public virtual Invercargill.Enumerable<TOut> zip<TOther,TOut> (Invercargill.Enumerable<TOther> other, owned Invercargill.ZipperTransformDelegate<T,TOther,TOut> transform);
+		public virtual GLib.Type element_type { get; }
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public class EnumerableInfo {
+		public EnumerableInfo (int? count, GLib.Type enumerable_type, GLib.Type value_type, Invercargill.EnumerableCategory category, Invercargill.ReadOnlyCollection<Invercargill.EnumerableInfo> sources, Invercargill.Enumerable<Invercargill.EnumerableInfo> ultimate_sources);
+		public EnumerableInfo.infer (Invercargill.Enumerable enumerable, Invercargill.EnumerableCategory category, Invercargill.Enumerable<Invercargill.Enumerable> sources);
+		public EnumerableInfo.infer_single (Invercargill.Enumerable enumerable, Invercargill.EnumerableCategory category, Invercargill.Enumerable source);
+		public EnumerableInfo.infer_ultimate (Invercargill.Enumerable enumerable, Invercargill.EnumerableCategory category);
+		public Invercargill.EnumerableCategory category { get; private set; }
+		public uint? count { get; private set; }
+		public GLib.Type element_type { get; private set; }
+		public GLib.Type enumerable_type { get; private set; }
+		public Invercargill.Enumerable<Invercargill.EnumerableInfo> sources { get; private set; }
+		public Invercargill.Enumerable<Invercargill.EnumerableInfo> ultimate_sources { get; private set; }
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public class Floats : Invercargill.Numbers<Invercargill.Floats,float?> {
+		public Floats ();
+		protected override float? add (float? a, float? b);
+		protected override Invercargill.Floats adhere (Invercargill.Enumerable<float?> enumerable);
+		public override bool can_wrap (GLib.Type element_type);
+		protected override float? convert (uint i);
+		protected override float? divide (float? a, float? b);
+		protected override bool equal_to (float? a, float? b);
+		protected override bool greater_than (float? a, float? b);
+		protected override bool less_than (float? a, float? b);
+		protected override float? multiply (float? a, float? b);
+		protected override Invercargill.Floats passthrough ();
+		protected override float? subtract (float? a, float? b);
+		protected override float? zero ();
+	}
+	[CCode (cheader_filename = "invercargill-1.h", copy_function = "invercargill_grouping_copy")]
+	[Compact]
+	[Immutable]
+	public class Grouping<TKey,TItems> {
+		public Invercargill.Enumerable<TItems> items;
+		public TKey key;
+		public Grouping (TKey key, Invercargill.Enumerable<TItems> items);
+		public Invercargill.Grouping<TKey,TItems> copy ();
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public class KeyCountPair<TKey> {
+		public KeyCountPair (TKey key, uint count);
+		public uint count { get; private set; }
+		public TKey key { get; private set; }
+		public GLib.Type key_type { get; }
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public class KeyValuePair<TKey,TValue> {
+		public KeyValuePair (TKey key, TValue value);
+		public TKey key { get; private set; }
+		public GLib.Type key_type { get; }
+		public TValue value { get; private set; }
+		public GLib.Type value_type { get; }
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public class LambdaTracker<T> : Invercargill.Tracker<T> {
+		public delegate T GetNextDelegate<T> ();
+		public delegate bool HasNextDelegate ();
+		public LambdaTracker (owned Invercargill.LambdaTracker.HasNextDelegate has_next_delegate, owned Invercargill.LambdaTracker.GetNextDelegate<T> get_next_delegate);
+		public override T get_next ();
+		public override bool has_next ();
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public class NativeElement<T> : GLib.Object, Invercargill.Element {
+		public NativeElement (T obj);
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public class NullElement : GLib.Object, Invercargill.Element {
+		public NullElement ();
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public abstract class Numbers<TSelf,T> : Invercargill.StickyProxyPromotion<TSelf,T>, Invercargill.Promotion<TSelf,T>, Invercargill.Equatable<Invercargill.Enumerable<T>> {
+		protected Numbers ();
+		protected abstract T add (T a, T b);
+		public virtual T average ();
+		protected abstract T convert (uint i);
+		protected abstract T divide (T a, T b);
+		protected abstract bool equal_to (T a, T b);
+		protected abstract bool greater_than (T a, T b);
+		protected abstract bool less_than (T a, T b);
+		public new virtual T max ();
+		public new virtual T min ();
+		protected abstract T multiply (T a, T b);
+		public virtual T product ();
+		protected abstract T subtract (T a, T b);
+		public virtual T sum ();
+		protected abstract T zero ();
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public class OrderConfiguration<T> {
+		public OrderConfiguration ();
+		public Invercargill.CompareDelegate<T> build_comparitor ();
+		public Invercargill.ThenOrderConfiguration<T> order_by<TKey> (owned Invercargill.TransformDelegate<T,TKey> key_selector, owned Invercargill.CompareDelegate<TKey>? key_comparitor = null);
+		public Invercargill.ThenOrderConfiguration<T> order_descending<TKey> (owned Invercargill.TransformDelegate<T,TKey> key_selector, owned Invercargill.CompareDelegate<TKey>? key_comparitor = null);
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public class Pair<TFirst,TSecond> {
+		public TFirst value1;
+		public bool value1_is_set;
+		public TSecond value2;
+		public bool value2_is_set;
+		public Pair (TFirst v1, bool v1set, TSecond v2, bool v2set);
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public class Partition<T> {
+		public Partition (Invercargill.Enumerable<T> items, Invercargill.PredicateDelegate<T> test);
+		public Invercargill.Enumerable<T> all_items { get; private set; }
+		public Invercargill.ImmutableLot<T> matching { get; private set; }
+		public Invercargill.ImmutableLot<T> non_matching { get; private set; }
+	}
+	[CCode (cheader_filename = "invercargill-1.h", copy_function = "invercargill_position_item_pair_copy")]
+	[Compact]
+	[Immutable]
+	public class PositionItemPair<T> {
+		public T item;
+		public int position;
+		public PositionItemPair (int position, T item);
+		public Invercargill.PositionItemPair<T> copy ();
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public class PropertyGroups : Invercargill.StickyProxyPromotion<Invercargill.PropertyGroups,Invercargill.Properties> {
+		public PropertyGroups ();
+		protected override Invercargill.PropertyGroups adhere (Invercargill.Enumerable<Invercargill.Properties> enumerable);
+		public new Invercargill.Attempts<TOut> attempt_map_with<TOut> (Invercargill.Mapping.PropertyMapper<TOut> mapper);
+		public override bool can_wrap (GLib.Type element_type);
+		protected override Invercargill.PropertyGroups passthrough ();
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public abstract class Proxy<T> : Invercargill.Enumerable<T> {
+		protected Proxy ();
+		public override Invercargill.Enumerable<T> act (Invercargill.ItemDelegate<T> handler);
+		public override TOut aggregate<TOut> (TOut initial, Invercargill.AggregateDelegate<TOut,T> aggregate_func);
+		public override bool all (Invercargill.PredicateDelegate<T> predicate);
+		public override bool any (Invercargill.PredicateDelegate<T> predicate = (i) =>true);
+		public override TPromotion assert_promotion<TPromotion> ();
+		public override Invercargill.Attempts<Invercargill.SelectionContext<T,TOut>> attempt_contextualised_select<TOut> (owned Invercargill.AttemptTransformDelegate<T,TOut> transform);
+		public override Invercargill.Attempts<TOut> attempt_map_with<TOut> (Invercargill.Mapping.Mapper<TOut,T> mapper);
+		public override Invercargill.Attempts<TOut> attempt_select<TOut> (owned Invercargill.AttemptTransformDelegate<T,TOut> transform);
+		public override Invercargill.Attempts<TOut> attempt_select_nested<TOut> (owned Invercargill.AttemptTransformDelegate<T,Invercargill.Enumerable<Invercargill.Attempt<TOut>>> transform);
+		public override Invercargill.Attempts<T> attempt_where (owned Invercargill.AttemptPredicate<T> predicate);
+		public override Invercargill.Enumerable<T> cache ();
+		public override Invercargill.Enumerable<TOut> cast<TOut> ();
+		public override Invercargill.Enumerable<Invercargill.Enumerable<T>> chunk (uint chunk_size);
+		public override Invercargill.Enumerable<T> combine (Invercargill.Enumerable<T> other, owned Invercargill.HashDelegate<T>? hash_func = null, owned Invercargill.EqualityDelegate<T>? equal_func = null);
+		public override Invercargill.Enumerable<T> combine_by<TKey> (Invercargill.Enumerable<T> other, owned Invercargill.TransformDelegate<T,TKey> key_selector, owned Invercargill.HashDelegate<TKey>? hash_func = null, owned Invercargill.EqualityDelegate<TKey>? equal_func = null);
+		public override Invercargill.Enumerable<T> common (Invercargill.Enumerable<T> other, owned Invercargill.HashDelegate<T>? hash_func = null, owned Invercargill.EqualityDelegate<T>? equal_func = null);
+		public override Invercargill.Enumerable<T> common_by<TKey> (Invercargill.Enumerable<T> other, owned Invercargill.TransformDelegate<T,TKey> key_selector, owned Invercargill.HashDelegate<TKey>? hash_func = null, owned Invercargill.EqualityDelegate<TKey>? equal_func = null);
+		public override Invercargill.Enumerable<T> concat (Invercargill.Enumerable<T> other);
+		public override bool contains (T item, Invercargill.EqualityDelegate<T>? equator = null);
+		public override Invercargill.Enumerable<Invercargill.SelectionContext<T,TOut>> contextualised_select<TOut> (owned Invercargill.TransformDelegate<T,TOut> transform);
+		public override uint count (Invercargill.PredicateDelegate<T>? predicate = null);
+		public override ulong count_ulong (Invercargill.PredicateDelegate<T>? predicate = null);
+		public override Invercargill.Enumerable<T> cycle (uint cycles = -1);
+		public override Invercargill.Enumerable<T> distinct (owned Invercargill.EqualityDelegate<T>? comparison = null);
+		public override Invercargill.Enumerable<T> distinct_by<TProp> (owned Invercargill.TransformDelegate<T,TProp> property_selector, owned Invercargill.EqualityDelegate<TProp>? property_equality);
+		public override T element_at (uint index) throws Invercargill.SequenceError;
+		public override T element_at_or_default (uint index);
+		public override Invercargill.Enumerable<T> exclude (Invercargill.Enumerable<T> other, owned Invercargill.HashDelegate<T>? hash_func = null, owned Invercargill.EqualityDelegate<T>? equal_func = null);
+		public override Invercargill.Enumerable<T> exclude_by<TKey> (Invercargill.Enumerable<T> other, owned Invercargill.TransformDelegate<T,TKey> key_selector, owned Invercargill.HashDelegate<TKey>? hash_func = null, owned Invercargill.EqualityDelegate<TKey>? equal_func = null);
+		public override T first (owned Invercargill.PredicateDelegate<T>? predicate = null) throws Invercargill.SequenceError;
+		public override T first_or_default (owned Invercargill.PredicateDelegate<T>? predicate = null);
+		public override Invercargill.Enumerable<TOut> fork<TOut> (owned Invercargill.TransformDelegate<T,TOut> fork1, owned Invercargill.TransformDelegate<T,TOut> fork2);
+		public override Invercargill.Enumerable<TOut> fork_many<TOut> (owned Invercargill.TransformDelegate<T,Invercargill.Enumerable<TOut>> fork1, owned Invercargill.TransformDelegate<T,Invercargill.Enumerable<TOut>> fork2);
+		public override Invercargill.Enumerable<T> from (owned Invercargill.PredicateDelegate<T> predicate);
+		public override Invercargill.EnumerableInfo get_info ();
+		public override Invercargill.Tracker<T> get_tracker ();
+		public override Invercargill.Enumerable<Invercargill.Grouping<TKey,T>> group_adjacent_by<TKey> (owned Invercargill.TransformDelegate<T,TKey> key_selector, owned Invercargill.EqualityDelegate<TKey>? key_equality = null);
+		public override Invercargill.Enumerable<Invercargill.Grouping<TKey,T>> group_by<TKey> (owned Invercargill.TransformDelegate<T,TKey> key_selector, owned Invercargill.EqualityDelegate<TKey>? key_equality = null);
+		public override Invercargill.Enumerable<Invercargill.KeyCountPair<T>> histogram (owned Invercargill.EqualityDelegate<T>? key_equality = null);
+		public override Invercargill.Enumerable<Invercargill.KeyCountPair<TKey>> histogram_by<TKey> (owned Invercargill.TransformDelegate<T,TKey> key_selector, owned Invercargill.EqualityDelegate<TKey>? key_equality = null);
+		public override Invercargill.Enumerable<T> interleave (Invercargill.Enumerable<T> other);
+		public override void iterate (Invercargill.ItemDelegate<T>? handler = null);
+		public override bool iterate_if (Invercargill.PredicateDelegate<T> handler);
+		public override Invercargill.Tracker<T> iterator ();
+		public override T last (owned Invercargill.PredicateDelegate<T>? predicate = null) throws Invercargill.SequenceError;
+		public override T last_or_default (owned Invercargill.PredicateDelegate<T>? predicate = null);
+		public override bool matches (Invercargill.Enumerable<T> other, Invercargill.EqualityDelegate<T> equals);
+		public override T max (Invercargill.TransformDelegate<T,int> int_delegate);
+		public override T min (Invercargill.TransformDelegate<T,int> int_delegate);
+		public override bool no (Invercargill.PredicateDelegate<T> predicate = (i) =>true);
+		public override Invercargill.Enumerable<T> non_common (Invercargill.Enumerable<T> other, owned Invercargill.HashDelegate<T>? hash_func = null, owned Invercargill.EqualityDelegate<T>? equal_func = null);
+		public override Invercargill.Enumerable<T> non_common_by<TKey> (Invercargill.Enumerable<T> other, owned Invercargill.TransformDelegate<T,TKey> key_selector, owned Invercargill.HashDelegate<TKey>? hash_func = null, owned Invercargill.EqualityDelegate<TKey>? equal_func = null);
+		public override Invercargill.Enumerable<TOut> of_type<TOut> ();
+		public override Invercargill.Enumerable<T> order_by<TKey> (owned Invercargill.TransformDelegate<T,TKey> key_selector, owned Invercargill.CompareDelegate<TKey>? comparitor = null);
+		public override Invercargill.Enumerable<T> order_by_complex (Invercargill.ItemDelegate<Invercargill.OrderConfiguration<T>> config);
+		public override Invercargill.Enumerable<T> order_by_descending<TKey> (owned Invercargill.TransformDelegate<T,TKey> key_selector, owned Invercargill.CompareDelegate<TKey>? comparitor = null);
+		public override Invercargill.Enumerable<T> pad_end (uint minimum_length, T pad_item);
+		public override Invercargill.Enumerable<T> pad_start (uint minimum_length, T pad_item);
+		public override Invercargill.Enumerable<Invercargill.Pair<T,TOther>> pair_up<TOther> (Invercargill.Enumerable<TOther> other);
+		public override Invercargill.Enumerable<Invercargill.SelectionContext<T,TOut>> parallel_contextualised_select<TOut> (owned Invercargill.TransformDelegate<T,TOut> transform);
+		public override void parallel_iterate (Invercargill.ItemDelegate<T> handler, uint workers = 0);
+		public override Invercargill.Enumerable<TOut> parallel_select<TOut> (owned Invercargill.TransformDelegate<T,TOut> transform, uint workers = 0);
+		public override Invercargill.Enumerable<T> parallel_where<T> (owned Invercargill.PredicateDelegate<T> predicate, uint workers = 0);
+		public override Invercargill.Partition<T> partition (Invercargill.PredicateDelegate<T> test);
+		public override uint? peek_count ();
+		public override Invercargill.Enumerable<T> prefix_with (T item, uint times = 1);
+		public override TPromotion promote_to<TPromotion> () throws Invercargill.PromotionError;
+		public override Invercargill.Enumerable<T> reverse ();
+		public override Invercargill.Enumerable<TOut> scan<TOut> (TOut initial_value, owned Invercargill.AggregateDelegate<T,TOut> scanning_delegate);
+		public override Invercargill.Enumerable<T> seal ();
+		public override Invercargill.Enumerable<TOut> select<TOut> (owned Invercargill.TransformDelegate<T,TOut> transform);
+		public override Invercargill.Enumerable<TOut> select_many<TOut> (owned Invercargill.TransformDelegate<T,Invercargill.Enumerable<TOut>> transform);
+		public override Invercargill.Enumerable<Invercargill.Pair<TFirst,TSecond>> select_pairs<TFirst,TSecond> (owned Invercargill.TransformDelegate<T,TFirst> transform1, owned Invercargill.TransformDelegate<T,TSecond> transform2);
+		public override Invercargill.DataStructures.Dictionary<TKey,TValue> select_to_dictionary<TKey,TValue> (Invercargill.TransformDelegate<T,TKey> key_selecter, Invercargill.TransformDelegate<T,TValue> value_selecter, Invercargill.HashDelegate<TKey>? key_hash_func = null, Invercargill.EqualityDelegate<TKey>? key_equal_func = null);
+		public override Invercargill.Enumerable<TOut> select_where<TOut> (owned Invercargill.FilterTransformDelegate<T,TOut> transform);
+		public override T single (owned Invercargill.PredicateDelegate<T>? predicate = null) throws Invercargill.SequenceError;
+		public override T single_or_default (owned Invercargill.PredicateDelegate<T>? predicate = null) throws Invercargill.SequenceError;
+		public override Invercargill.Enumerable<T> skip (uint count);
+		public override Invercargill.Enumerable<T> skip_last (uint count);
+		public override Invercargill.Enumerable<T> sort (owned Invercargill.CompareDelegate<T> compare);
+		public override Invercargill.Enumerable<T> suffix_with (T item, uint times = 1);
+		public override Invercargill.Enumerable<T> take (uint count);
+		public override Invercargill.Enumerable<T> take_last (uint count);
+		public override T[] to_array ();
+		public override Invercargill.DataStructures.Buffer<T> to_buffer ();
+		public override Invercargill.DataStructures.Dictionary<TKey,T> to_dictionary<TKey> (Invercargill.TransformDelegate<T,TKey> key_selecter, Invercargill.HashDelegate<TKey>? key_hash_func = null, Invercargill.EqualityDelegate<TKey>? key_equal_func = null);
+		public override Invercargill.Elements to_elements ();
+		public override Invercargill.DataStructures.HashSet<T> to_hash_set (Invercargill.HashDelegate<T>? hash_func = null, Invercargill.EqualityDelegate<T>? equal_func = null);
+		public override Invercargill.DataStructures.ImmutableBuffer<T> to_immutable_buffer ();
+		public override GLib.Object[] to_object_array () throws Invercargill.SequenceError;
+		public override Invercargill.DataStructures.RingBuffer<T> to_ring_buffer (uint? size = null);
+		public override Invercargill.DataStructures.Series<T> to_series ();
+		public override string to_string (Invercargill.StringifyDelegate<T>? stringifier = null, string separator = "");
+		public override Invercargill.DataStructures.Vector<T> to_vector ();
+		public override Invercargill.Enumerable<T> until (owned Invercargill.PredicateDelegate<T> predicate);
+		public override Invercargill.Enumerable<T> where (owned Invercargill.PredicateDelegate<T> predicate);
+		public override Invercargill.Enumerable<Invercargill.Enumerable<T>> window (uint window_size);
+		public override Invercargill.Enumerable<Invercargill.PositionItemPair<T>> with_positions ();
+		public override Invercargill.Enumerable<TOut> zip<TOther,TOut> (Invercargill.Enumerable<TOther> other, owned Invercargill.ZipperTransformDelegate<T,TOther,TOut> transform);
+		public override GLib.Type element_type { get; }
+		protected Invercargill.Enumerable<T> inner { get; set; }
+	}
+	[CCode (cheader_filename = "invercargill-1.h", copy_function = "invercargill_selection_context_copy")]
+	[Compact]
+	[Immutable]
+	public class SelectionContext<TOrigin,TResult> {
+		public TOrigin origin;
+		public TResult result;
+		public SelectionContext (TOrigin origin, TResult result);
+		public Invercargill.SelectionContext<TOrigin,TResult> copy ();
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public class Signed16BitIntegers : Invercargill.Numbers<Invercargill.Signed16BitIntegers,int16> {
+		public Signed16BitIntegers ();
+		protected override int16 add (int16 a, int16 b);
+		protected override Invercargill.Signed16BitIntegers adhere (Invercargill.Enumerable<int16> enumerable);
+		public override bool can_wrap (GLib.Type element_type);
+		protected override int16 convert (uint i);
+		protected override int16 divide (int16 a, int16 b);
+		protected override bool equal_to (int16 a, int16 b);
+		protected override bool greater_than (int16 a, int16 b);
+		protected override bool less_than (int16 a, int16 b);
+		protected override int16 multiply (int16 a, int16 b);
+		protected override Invercargill.Signed16BitIntegers passthrough ();
+		protected override int16 subtract (int16 a, int16 b);
+		protected override int16 zero ();
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public class Signed32BitIntegers : Invercargill.Numbers<Invercargill.Signed32BitIntegers,int32> {
+		public Signed32BitIntegers ();
+		protected override int32 add (int32 a, int32 b);
+		protected override Invercargill.Signed32BitIntegers adhere (Invercargill.Enumerable<int32> enumerable);
+		public override bool can_wrap (GLib.Type element_type);
+		protected override int32 convert (uint i);
+		protected override int32 divide (int32 a, int32 b);
+		protected override bool equal_to (int32 a, int32 b);
+		protected override bool greater_than (int32 a, int32 b);
+		protected override bool less_than (int32 a, int32 b);
+		protected override int32 multiply (int32 a, int32 b);
+		protected override Invercargill.Signed32BitIntegers passthrough ();
+		protected override int32 subtract (int32 a, int32 b);
+		protected override int32 zero ();
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public class Signed64BitIntegers : Invercargill.Numbers<Invercargill.Signed64BitIntegers,int64?> {
+		public Signed64BitIntegers ();
+		protected override int64? add (int64? a, int64? b);
+		protected override Invercargill.Signed64BitIntegers adhere (Invercargill.Enumerable<int64?> enumerable);
+		public override bool can_wrap (GLib.Type element_type);
+		protected override int64? convert (uint i);
+		protected override int64? divide (int64? a, int64? b);
+		protected override bool equal_to (int64? a, int64? b);
+		protected override bool greater_than (int64? a, int64? b);
+		protected override bool less_than (int64? a, int64? b);
+		protected override int64? multiply (int64? a, int64? b);
+		protected override Invercargill.Signed64BitIntegers passthrough ();
+		protected override int64? subtract (int64? a, int64? b);
+		protected override int64? zero ();
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public class Signed8BitIntegers : Invercargill.Numbers<Invercargill.Signed8BitIntegers,int8> {
+		public Signed8BitIntegers ();
+		protected override int8 add (int8 a, int8 b);
+		protected override Invercargill.Signed8BitIntegers adhere (Invercargill.Enumerable<int8> enumerable);
+		public override bool can_wrap (GLib.Type element_type);
+		protected override int8 convert (uint i);
+		protected override int8 divide (int8 a, int8 b);
+		protected override bool equal_to (int8 a, int8 b);
+		protected override bool greater_than (int8 a, int8 b);
+		protected override bool less_than (int8 a, int8 b);
+		protected override int8 multiply (int8 a, int8 b);
+		protected override Invercargill.Signed8BitIntegers passthrough ();
+		protected override int8 subtract (int8 a, int8 b);
+		protected override int8 zero ();
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public class SignedNativeIntegers : Invercargill.Numbers<Invercargill.SignedNativeIntegers,int>, Invercargill.Promotion<Invercargill.SignedNativeIntegers,int> {
+		public SignedNativeIntegers ();
+		protected override int add (int a, int b);
+		protected override Invercargill.SignedNativeIntegers adhere (Invercargill.Enumerable<int> enumerable);
+		protected override int convert (uint i);
+		protected override int divide (int a, int b);
+		protected override bool equal_to (int a, int b);
+		protected override bool greater_than (int a, int b);
+		protected override bool less_than (int a, int b);
+		protected override int multiply (int a, int b);
+		protected override Invercargill.SignedNativeIntegers passthrough ();
+		protected override int subtract (int a, int b);
+		protected override int zero ();
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public abstract class StickyProxy<TEnumerable,T> : Invercargill.Proxy<T>, Invercargill.Sticky<TEnumerable,T> {
+		protected StickyProxy ();
+		protected abstract TEnumerable adhere (Invercargill.Enumerable<T> enumerable);
+		protected abstract TEnumerable passthrough ();
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public abstract class StickyProxyPromotion<TPromotion,T> : Invercargill.StickyProxy<TPromotion,T>, Invercargill.Sticky<TPromotion,T>, Invercargill.Promotion<TPromotion,T> {
+		protected StickyProxyPromotion ();
+		protected abstract bool can_wrap (GLib.Type element_type);
+		protected virtual TPromotion wrap (Invercargill.Enumerable<T> enumerable);
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public class ThenOrderConfiguration<T> {
+		public Invercargill.ThenOrderConfiguration<T> then_by<TKey> (owned Invercargill.TransformDelegate<T,TKey> key_selector, owned Invercargill.CompareDelegate<TKey>? key_comparitor = null);
+		public Invercargill.ThenOrderConfiguration<T> then_by_descending<TKey> (owned Invercargill.TransformDelegate<T,TKey> key_selector, owned Invercargill.CompareDelegate<TKey>? key_comparitor = null);
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public abstract class Tracker<T> {
+		protected Tracker ();
+		public T @get ();
+		public abstract T get_next ();
+		public abstract bool has_next ();
+		public bool next ();
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public class Unsigned16BitIntegers : Invercargill.Numbers<Invercargill.Unsigned16BitIntegers,uint16> {
+		public Unsigned16BitIntegers ();
+		protected override uint16 add (uint16 a, uint16 b);
+		protected override Invercargill.Unsigned16BitIntegers adhere (Invercargill.Enumerable<uint16> enumerable);
+		public override bool can_wrap (GLib.Type element_type);
+		protected override uint16 convert (uint i);
+		protected override uint16 divide (uint16 a, uint16 b);
+		protected override bool equal_to (uint16 a, uint16 b);
+		protected override bool greater_than (uint16 a, uint16 b);
+		protected override bool less_than (uint16 a, uint16 b);
+		protected override uint16 multiply (uint16 a, uint16 b);
+		protected override Invercargill.Unsigned16BitIntegers passthrough ();
+		protected override uint16 subtract (uint16 a, uint16 b);
+		protected override uint16 zero ();
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public class Unsigned32BitIntegers : Invercargill.Numbers<Invercargill.Unsigned32BitIntegers,uint32> {
+		public Unsigned32BitIntegers ();
+		protected override uint32 add (uint32 a, uint32 b);
+		protected override Invercargill.Unsigned32BitIntegers adhere (Invercargill.Enumerable<uint32> enumerable);
+		public override bool can_wrap (GLib.Type element_type);
+		protected override uint32 convert (uint i);
+		protected override uint32 divide (uint32 a, uint32 b);
+		protected override bool equal_to (uint32 a, uint32 b);
+		protected override bool greater_than (uint32 a, uint32 b);
+		protected override bool less_than (uint32 a, uint32 b);
+		protected override uint32 multiply (uint32 a, uint32 b);
+		protected override Invercargill.Unsigned32BitIntegers passthrough ();
+		protected override uint32 subtract (uint32 a, uint32 b);
+		protected override uint32 zero ();
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public class Unsigned64BitIntegers : Invercargill.Numbers<Invercargill.Unsigned64BitIntegers,uint64?> {
+		public Unsigned64BitIntegers ();
+		protected override uint64? add (uint64? a, uint64? b);
+		protected override Invercargill.Unsigned64BitIntegers adhere (Invercargill.Enumerable<uint64?> enumerable);
+		public override bool can_wrap (GLib.Type element_type);
+		protected override uint64? convert (uint i);
+		protected override uint64? divide (uint64? a, uint64? b);
+		protected override bool equal_to (uint64? a, uint64? b);
+		protected override bool greater_than (uint64? a, uint64? b);
+		protected override bool less_than (uint64? a, uint64? b);
+		protected override uint64? multiply (uint64? a, uint64? b);
+		protected override Invercargill.Unsigned64BitIntegers passthrough ();
+		protected override uint64? subtract (uint64? a, uint64? b);
+		protected override uint64? zero ();
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public class Unsigned8BitIntegers : Invercargill.Numbers<Invercargill.Unsigned8BitIntegers,uint8> {
+		public Unsigned8BitIntegers ();
+		protected override uint8 add (uint8 a, uint8 b);
+		protected override Invercargill.Unsigned8BitIntegers adhere (Invercargill.Enumerable<uint8> enumerable);
+		public override bool can_wrap (GLib.Type element_type);
+		protected override uint8 convert (uint i);
+		protected override uint8 divide (uint8 a, uint8 b);
+		protected override bool equal_to (uint8 a, uint8 b);
+		protected override bool greater_than (uint8 a, uint8 b);
+		protected override bool less_than (uint8 a, uint8 b);
+		protected override uint8 multiply (uint8 a, uint8 b);
+		protected override Invercargill.Unsigned8BitIntegers passthrough ();
+		protected override uint8 subtract (uint8 a, uint8 b);
+		protected override uint8 zero ();
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public class UnsignedNativeIntegers : Invercargill.Numbers<Invercargill.UnsignedNativeIntegers,uint> {
+		public UnsignedNativeIntegers ();
+		protected override uint add (uint a, uint b);
+		protected override Invercargill.UnsignedNativeIntegers adhere (Invercargill.Enumerable<uint> enumerable);
+		public override bool can_wrap (GLib.Type element_type);
+		protected override uint convert (uint i);
+		protected override uint divide (uint a, uint b);
+		protected override bool equal_to (uint a, uint b);
+		protected override bool greater_than (uint a, uint b);
+		protected override bool less_than (uint a, uint b);
+		protected override uint multiply (uint a, uint b);
+		protected override Invercargill.UnsignedNativeIntegers passthrough ();
+		protected override uint subtract (uint a, uint b);
+		protected override uint zero ();
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	[GenericAccessors]
+	public interface Addressable<T> : Invercargill.ReadOnlyAddressable<T> {
+		public abstract void @set (uint index, T item) throws Invercargill.IndexError;
+		public virtual void set_all (uint first_index, Invercargill.Enumerable<T> items) throws Invercargill.IndexError;
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	[GenericAccessors]
+	public interface AddressableBytes : Invercargill.Addressable<uint8>, Invercargill.ReadOnlyAddressableBytes {
+		public virtual void set_all_int16 (uint index, Invercargill.Enumerable<int16?> values, Invercargill.Endianness endianness) throws Invercargill.IndexError;
+		public virtual void set_all_int32 (uint index, Invercargill.Enumerable<int32?> values, Invercargill.Endianness endianness) throws Invercargill.IndexError;
+		public virtual void set_all_int64 (uint index, Invercargill.Enumerable<int64?> values, Invercargill.Endianness endianness) throws Invercargill.IndexError;
+		public virtual void set_all_int8 (uint index, Invercargill.Enumerable<int8?> values, Invercargill.Endianness endianness) throws Invercargill.IndexError;
+		public virtual void set_all_uint16 (uint index, Invercargill.Enumerable<uint16?> values, Invercargill.Endianness endianness) throws Invercargill.IndexError;
+		public virtual void set_all_uint32 (uint index, Invercargill.Enumerable<uint32?> values, Invercargill.Endianness endianness) throws Invercargill.IndexError;
+		public virtual void set_all_uint64 (uint index, Invercargill.Enumerable<uint64?> values, Invercargill.Endianness endianness) throws Invercargill.IndexError;
+		public virtual void set_all_uint8 (uint index, Invercargill.Enumerable<uint8?> values, Invercargill.Endianness endianness) throws Invercargill.IndexError;
+		public virtual void set_int16 (uint index, int16 value, Invercargill.Endianness endianness) throws Invercargill.IndexError;
+		public virtual void set_int32 (uint index, int32 value, Invercargill.Endianness endianness) throws Invercargill.IndexError;
+		public virtual void set_int64 (uint index, int64 value, Invercargill.Endianness endianness) throws Invercargill.IndexError;
+		public virtual void set_int8 (uint index, int8 value, Invercargill.Endianness endianness) throws Invercargill.IndexError;
+		public virtual void set_uint16 (uint index, uint16 value, Invercargill.Endianness endianness) throws Invercargill.IndexError;
+		public virtual void set_uint32 (uint index, uint32 value, Invercargill.Endianness endianness) throws Invercargill.IndexError;
+		public virtual void set_uint64 (uint index, uint64 value, Invercargill.Endianness endianness) throws Invercargill.IndexError;
+		public virtual void set_uint8 (uint index, uint8 value, Invercargill.Endianness endianness) throws Invercargill.IndexError;
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	[GenericAccessors]
+	public interface AddressableCollection<T> : Invercargill.Addressable<T>, Invercargill.Collection<T> {
+		public abstract void insert_at (uint index, T item) throws Invercargill.IndexError;
+		public abstract void remove_at (uint index) throws Invercargill.IndexError;
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	[GenericAccessors]
+	public interface Associative<TKey,TValue> : Invercargill.ReadOnlyAssociative<TKey,TValue> {
+		public abstract bool add (TKey key, TValue value);
+		public abstract void clear ();
+		public abstract bool remove (TKey key, out TValue value = null);
+		public abstract void @set (TKey key, TValue value);
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public interface BinaryData : Invercargill.Enumerable<uint8>, Invercargill.Sticky<Invercargill.BinaryData,uint8>, Invercargill.Equatable<Invercargill.Enumerable<uint8>>, Invercargill.Hashable {
+		public virtual Invercargill.DataStructures.ByteBuffer read (uint start, uint length);
+		public virtual Invercargill.BinaryData slice (uint start, uint end);
+		public virtual string to_base64 ();
+		public virtual Invercargill.DataStructures.ByteBuffer to_byte_buffer ();
+		public virtual GLib.Bytes to_bytes ();
+		public virtual string to_hex ();
+		public virtual string to_raw_string (bool null_terminate = true);
+		public virtual size_t write_to (void* array, size_t max_size);
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	[GenericAccessors]
+	public interface Collection<T> : Invercargill.ReadOnlyCollection<T> {
+		public abstract void add (T item);
+		public virtual void add_all (Invercargill.Enumerable<T> items);
+		public abstract void clear ();
+		public virtual void remove (T item, Invercargill.EqualityDelegate<T>? equator = null);
+		public virtual void remove_all (Invercargill.Enumerable<T> items, Invercargill.EqualityDelegate<T>? equator = null);
+		public abstract void remove_all_where (Invercargill.PredicateDelegate<T> predicate);
+		public abstract void remove_first_where (Invercargill.PredicateDelegate<T> predicate);
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public interface Comparable<T> {
+		public abstract int compare (T other);
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public interface Element : GLib.Object {
+		public virtual T @as<T> () throws Invercargill.ElementError;
+		public virtual T as_or_default<T> ();
+		public virtual T assert_as<T> ();
+		public virtual bool assignable_to<T> ();
+		public abstract bool assignable_to_type (GLib.Type type);
+		public virtual bool @is<T> ();
+		public abstract bool is_null ();
+		public virtual bool is_type (GLib.Type type);
+		public virtual string to_string ();
+		public abstract bool try_get_as<T> (out T result);
+		public abstract GLib.Type? type ();
+		public virtual string type_name ();
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public interface Elements : Invercargill.Enumerable<Invercargill.Element>, Invercargill.Sticky<Invercargill.Elements,Invercargill.Element> {
+		public virtual Invercargill.Enumerable<T> assert_elements_as<T> ();
+		public virtual Invercargill.Enumerable<T> elements_as<T> ();
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public interface Equatable<T> {
+		public abstract bool equals (T other);
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public interface Hashable {
+		public abstract uint hash_code ();
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	[GenericAccessors]
+	public interface ImmutableLot<T> : Invercargill.Lot<T> {
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	[GenericAccessors]
+	public interface Lot<T> : Invercargill.Enumerable<T> {
+		public abstract uint length { get; }
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public interface Promotion<TSelf,T> : Invercargill.Enumerable<T>, Invercargill.Sticky<TSelf,T> {
+		protected abstract bool can_wrap (GLib.Type element_type);
+		protected abstract TSelf wrap (Invercargill.Enumerable<T> enumerable);
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public interface Properties : Invercargill.Associative<string,Invercargill.Element> {
+		public abstract void set_native<T> (string key, T value) throws Invercargill.ElementError;
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	[GenericAccessors]
+	public interface Queue<T> : Invercargill.Enumerable<T> {
+		public abstract T peek () throws Invercargill.SequenceError;
+		public abstract T pop () throws Invercargill.SequenceError;
+		public abstract void push (owned T item);
+		public virtual void push_all (Invercargill.Enumerable<T> items);
+		public virtual bool try_peek (out T item);
+		public virtual bool try_pop (out T item);
+		public abstract void unblock ();
+		public abstract bool is_unblocked { get; }
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	[GenericAccessors]
+	public interface ReadOnlyAddressable<T> : Invercargill.Lot<T> {
+		public virtual bool binary_search (Invercargill.BinarySearchDelegate<T> search_func, out uint index);
+		public abstract uint? first_index_of (Invercargill.PredicateDelegate<T> predicate);
+		public abstract T @get (uint index) throws Invercargill.IndexError;
+		public virtual T get_or_default (uint index);
+		public virtual uint? index_of (T item, Invercargill.EqualityDelegate<T>? equator = null);
+		public abstract bool try_get (uint index, out T value);
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	[GenericAccessors]
+	public interface ReadOnlyAddressableBytes : Invercargill.ReadOnlyAddressable<uint8>, Invercargill.Hashable, Invercargill.Equatable<Invercargill.Enumerable<uint8>>, Invercargill.Sticky<Invercargill.BinaryData,uint8>, Invercargill.BinaryData {
+		public virtual int16? get_int16 (uint index, Invercargill.Endianness endianness = Endianness.Native) throws Invercargill.IndexError;
+		public virtual int32? get_int32 (uint index, Invercargill.Endianness endianness = Endianness.Native) throws Invercargill.IndexError;
+		public virtual int64? get_int64 (uint index, Invercargill.Endianness endianness = Endianness.Native) throws Invercargill.IndexError;
+		public virtual int8? get_int8 (uint index) throws Invercargill.IndexError;
+		public virtual uint16? get_uint16 (uint index, Invercargill.Endianness endianness = Endianness.Native) throws Invercargill.IndexError;
+		public virtual uint32? get_uint32 (uint index, Invercargill.Endianness endianness = Endianness.Native) throws Invercargill.IndexError;
+		public virtual uint64? get_uint64 (uint index, Invercargill.Endianness endianness = Endianness.Native) throws Invercargill.IndexError;
+		public virtual uint8? get_uint8 (uint index) throws Invercargill.IndexError;
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	[GenericAccessors]
+	public interface ReadOnlyAssociative<TKey,TValue> : Invercargill.Lot<Invercargill.KeyValuePair<TKey,TValue>> {
+		public virtual TValue @get (TKey key) throws Invercargill.IndexError;
+		public virtual TValue get_or_default (TKey key);
+		public abstract bool has (TKey key);
+		public abstract bool try_get (TKey key, out TValue value);
+		public abstract Invercargill.Enumerable<TKey> keys { owned get; }
+		public abstract Invercargill.Enumerable<TValue> values { owned get; }
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	[GenericAccessors]
+	public interface ReadOnlyCollection<T> : Invercargill.Lot<T> {
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	[GenericAccessors]
+	public interface ReadOnlySet<T> : Invercargill.Lot<T> {
+		public abstract bool equals (Invercargill.Enumerable<T> other);
+		public virtual T find (T search);
+		public abstract bool has (T item);
+		public virtual bool is_proper_subset_of (Invercargill.Enumerable<T> other);
+		public virtual bool is_proper_superset_of (Invercargill.Enumerable<T> other);
+		public abstract bool is_subset_of (Invercargill.Enumerable<T> other);
+		public virtual bool is_superset_of (Invercargill.Enumerable<T> other);
+		public virtual bool overlaps (Invercargill.Enumerable<T> other);
+		public abstract bool try_find (T search, out T item);
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	[GenericAccessors]
+	public interface Set<T> : Invercargill.ReadOnlySet<T> {
+		public abstract bool add (T item);
+		public abstract void clear ();
+		public virtual void except_with (Invercargill.Enumerable<T> items);
+		public virtual void intersect_with (Invercargill.Enumerable<T> items);
+		public abstract T remove (T item);
+		public abstract void @set (T item);
+		public virtual void symmetric_except_with (Invercargill.Enumerable<T> items);
+		public virtual void union_with (Invercargill.Enumerable<T> items);
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public interface Sticky<TEnumerable,T> : Invercargill.Enumerable<T> {
+		public new virtual TEnumerable act (Invercargill.ItemDelegate<T> handler);
+		protected abstract TEnumerable adhere (Invercargill.Enumerable<T> enumerable);
+		public new virtual TEnumerable cache ();
+		public new virtual TEnumerable combine (Invercargill.Enumerable<T> other, owned Invercargill.HashDelegate<T>? hash_func = null, owned Invercargill.EqualityDelegate<T>? equal_func = null);
+		public new virtual TEnumerable combine_by<TKey> (Invercargill.Enumerable<T> other, owned Invercargill.TransformDelegate<T,TKey> key_selector, owned Invercargill.HashDelegate<TKey>? hash_func = null, owned Invercargill.EqualityDelegate<TKey>? equal_func = null);
+		public new virtual TEnumerable common (Invercargill.Enumerable<T> other, owned Invercargill.HashDelegate<T>? hash_func = null, owned Invercargill.EqualityDelegate<T>? equal_func = null);
+		public new virtual TEnumerable common_by<TKey> (Invercargill.Enumerable<T> other, owned Invercargill.TransformDelegate<T,TKey> key_selector, owned Invercargill.HashDelegate<TKey>? hash_func = null, owned Invercargill.EqualityDelegate<TKey>? equal_func = null);
+		public new virtual TEnumerable concat (Invercargill.Enumerable<T> other);
+		public new virtual TEnumerable cycle (uint cycles = -1);
+		public new virtual TEnumerable debug_trace (string additional_message = "", owned Invercargill.StringifyDelegate<T>? stringifier = null, owned Invercargill.DebugOutputDelegate? output_func = null, bool formatting = true);
+		public new virtual TEnumerable debug_type (string additional_message = "", Invercargill.DebugOutputDelegate? output_func = null, bool formatting = true);
+		public new virtual TEnumerable distinct (owned Invercargill.EqualityDelegate<T>? comparison = null);
+		public new virtual TEnumerable distinct_by<TProp> (owned Invercargill.TransformDelegate<T,TProp> property_selector, owned Invercargill.EqualityDelegate<TProp>? property_equality);
+		public new virtual TEnumerable exclude (Invercargill.Enumerable<T> other, owned Invercargill.HashDelegate<T>? hash_func = null, owned Invercargill.EqualityDelegate<T>? equal_func = null);
+		public new virtual TEnumerable exclude_by<TKey> (Invercargill.Enumerable<T> other, owned Invercargill.TransformDelegate<T,TKey> key_selector, owned Invercargill.HashDelegate<TKey>? hash_func = null, owned Invercargill.EqualityDelegate<TKey>? equal_func = null);
+		public new virtual TEnumerable from (owned Invercargill.PredicateDelegate<T> predicate);
+		public new virtual TEnumerable interleave (Invercargill.Enumerable<T> other);
+		public new virtual TEnumerable non_common (Invercargill.Enumerable<T> other, owned Invercargill.HashDelegate<T>? hash_func = null, owned Invercargill.EqualityDelegate<T>? equal_func = null);
+		public new virtual TEnumerable non_common_by<TKey> (Invercargill.Enumerable<T> other, owned Invercargill.TransformDelegate<T,TKey> key_selector, owned Invercargill.HashDelegate<TKey>? hash_func = null, owned Invercargill.EqualityDelegate<TKey>? equal_func = null);
+		public new virtual TEnumerable order_by<TKey> (owned Invercargill.TransformDelegate<T,TKey> key_selector, owned Invercargill.CompareDelegate<TKey>? comparitor = null);
+		public new virtual TEnumerable order_by_complex (Invercargill.ItemDelegate<Invercargill.OrderConfiguration<T>> config);
+		public new virtual TEnumerable order_by_descending<TKey> (owned Invercargill.TransformDelegate<T,TKey> key_selector, owned Invercargill.CompareDelegate<TKey>? comparitor = null);
+		public new virtual TEnumerable pad_end (uint minimum_length, T pad_item);
+		public new virtual TEnumerable pad_start (uint minimum_length, T pad_item);
+		public new virtual TEnumerable parallel_where<T> (owned Invercargill.PredicateDelegate<T> predicate, uint workers = 0);
+		public new virtual TEnumerable prefix_with (T item, uint times = 1);
+		public new virtual TEnumerable reverse ();
+		public new virtual TEnumerable seal ();
+		public new virtual TEnumerable skip (uint count);
+		public new virtual TEnumerable skip_last (uint count);
+		public new virtual TEnumerable sort (owned Invercargill.CompareDelegate<T> compare);
+		public new virtual TEnumerable suffix_with (T item, uint times = 1);
+		public new virtual TEnumerable take (uint count);
+		public new virtual TEnumerable take_last (uint count);
+		public new virtual TEnumerable until (owned Invercargill.PredicateDelegate<T> predicate);
+		public new virtual TEnumerable where (owned Invercargill.PredicateDelegate<T> predicate);
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public interface Stringifyable {
+		public abstract string to_string ();
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public enum Endianness {
+		Native,
+		BigEndian,
+		LittleEndian
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public enum EnumerableCategory {
+		IN_MEMORY,
+		EXTERNAL,
+		COMPUTED,
+		CACHED,
+		PROXY;
+		public string to_string ();
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public errordomain ByteCompositionReadError {
+		EMPTY_READ,
+		BUFFER_OVERFLOW
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public errordomain ElementError {
+		INVALID_CONVERSION
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public errordomain IndexError {
+		INDEX_EXCEEDS_UPPER_BOUNDS,
+		INDEX_EXCEEDS_LOWER_BOUNDS,
+		KEY_NOT_FOUND,
+		KEY_EXISTS
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public errordomain PromotionError {
+		INVALID_PROMOTION_TYPE,
+		INCOMPATIBLE_ELEMENT_TYPE
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public errordomain SequenceError {
+		NO_ELEMENTS,
+		MULTIPLE_ELEMENTS,
+		INVALID_TYPE,
+		TOO_FEW_ELEMENTS
+	}
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public delegate TAggregate AggregateDelegate<TAggregate,TIn> (TAggregate aggregate, TIn item);
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public delegate T AttemptDelegate<T> () throws GLib.Error;
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public delegate bool AttemptPredicate<T> (T item) throws GLib.Error;
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public delegate TOut AttemptTransformDelegate<TIn,TOut> (TIn input) throws GLib.Error;
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public delegate int BinarySearchDelegate<T> (T item);
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public delegate T CachedGet<T> ();
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public delegate int CompareDelegate<T> (T a, T b);
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public delegate void DebugOutputDelegate (string output);
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public delegate bool EqualityDelegate<T> (T a, T b);
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public delegate TOut ErrorCatchingDelegate<TIn,TOut> (TIn item, GLib.Error error);
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public delegate TOut ErrorThrowingDelegate<TIn,TOut> (TIn item) throws GLib.Error;
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public delegate bool FilterTransformDelegate<TIn,TOut> (TIn item, out TOut res);
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public delegate uint HashDelegate<T> (T item);
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public delegate void ItemDelegate<T> (T item);
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public delegate bool PredicateDelegate<T> (T item);
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public delegate string StringifyDelegate<T> (T item);
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public delegate TOut TransformDelegate<TIn,TOut> (TIn item);
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public delegate TOut ZipperTransformDelegate<TFirst,TSecond,TOut> (Invercargill.Pair<TFirst,TSecond> pair);
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public static T keyed_once<T> (int location, owned Invercargill.CachedGet<T> constructor);
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public static T once<T> (owned Invercargill.CachedGet<T> constructor);
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public static void register_promotion (GLib.Type generic, GLib.Type promotion);
+	[CCode (cheader_filename = "invercargill-1.h")]
+	public static void resolve_promotion<T> (ref GLib.Type type);
+}