core :: union_find
union–find algorithm using an efficient disjoint-set data structureroot to execute
			
# Services conforming to POSIX
module posix
in "C Header" `{
#include <sys/types.h>
#include <unistd.h>
#include <pwd.h>
#include <grp.h>
`}
redef class Sys
	# Set the real current user id of this process
	fun uid=(uid: Int): Bool `{ return setuid(uid); `}
	# Current real user id of this process
	fun uid: Int `{ return getuid(); `}
	# Set the current real group id of this process
	fun gid=(gid: Int): Bool `{ return setgid(gid); `}
	# Current real group id of this process
	fun gid: Int `{ return getgid(); `}
	# Set the effective user id of this process
	fun euid=(uid: Int): Bool `{ return seteuid(uid); `}
	# The effective user id of this process
	fun euid: Int `{ return geteuid(); `}
	# Set the effective group id of this process
	fun egid=(gid: Int): Bool `{ return setegid(gid); `}
	# The effective group id of this process
	fun egid: Int `{ return getegid(); `}
end
# Information on a user account
extern class Passwd `{struct passwd*`}
	# Get the `Passwd` of the user with the `uid`
	new from_uid(uid: Int) `{ return getpwuid(uid); `}
	# Get the `Passwd` of the user with the `name`
	new from_name(name: String) import String.to_cstring `{ return getpwnam( String_to_cstring(name) ); `}
	# Username
	fun name: String import CString.to_s `{ return CString_to_s(self->pw_name); `}
	# User password
	fun passwd: String import CString.to_s `{ return CString_to_s(self->pw_passwd); `}
	# User ID
	fun uid: Int `{ return self->pw_uid; `}
	# Group ID
	fun gid: Int `{ return self->pw_gid; `}
	# Home directory
	fun dir: String import CString.to_s `{ return CString_to_s(self->pw_dir); `}
	# Shell program
	fun shell: String import CString.to_s `{ return CString_to_s(self->pw_shell); `}
end
# Information on a user group
extern class Group `{struct group*`}
	# Get a group from its id
	new from_gid(gid: Int) `{ return getgrgid(gid); `}
	# Get a group from its name
	new from_name(name: String) import String.to_cstring `{ return getgrnam( String_to_cstring(name) ); `}
	# Name of this ground
	fun name: String import CString.to_s `{ return CString_to_s(self->gr_name); `}
	# Encrypted password of this group
	fun passwd: String import CString.to_s `{ return CString_to_s(self->gr_passwd); `}
	# Id of this group
	fun gid: Int `{ return self->gr_gid; `}
	# List of the members of the group
	fun mem: Array[String] import Array[String], Array[String].add, CString.to_s `{
		char **mem;
		int m;
		Array_of_String ret;
		mem = self->gr_mem;
		ret = new_Array_of_String();
		for (m = 0; mem[m] != NULL; m++)
			Array_of_String_add(ret, CString_to_s(mem[m]));
		return ret;
	`}
end
lib/posix/posix.nit:15,1--109,3