mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			188 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			188 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| (***********************************************************************)
 | |
| (*                                                                     *)
 | |
| (*                         Applied Type System                         *)
 | |
| (*                                                                     *)
 | |
| (***********************************************************************)
 | |
| 
 | |
| (*
 | |
| ** ATS/Postiats - Unleashing the Potential of Types!
 | |
| ** Copyright (C) 2011-2013 Hongwei Xi, ATS Trustful Software, Inc.
 | |
| ** All rights reserved
 | |
| **
 | |
| ** ATS is free software;  you can  redistribute it and/or modify it under
 | |
| ** the terms of  the GNU GENERAL PUBLIC LICENSE (GPL) as published by the
 | |
| ** Free Software Foundation; either version 3, or (at  your  option)  any
 | |
| ** later version.
 | |
| ** 
 | |
| ** ATS is distributed in the hope that it will be useful, but WITHOUT ANY
 | |
| ** WARRANTY; without  even  the  implied  warranty  of MERCHANTABILITY or
 | |
| ** FITNESS FOR A PARTICULAR PURPOSE.  See the  GNU General Public License
 | |
| ** for more details.
 | |
| ** 
 | |
| ** You  should  have  received  a  copy of the GNU General Public License
 | |
| ** along  with  ATS;  see the  file COPYING.  If not, please write to the
 | |
| ** Free Software Foundation,  51 Franklin Street, Fifth Floor, Boston, MA
 | |
| ** 02110-1301, USA.
 | |
| *)
 | |
| 
 | |
| (* ****** ****** *)
 | |
| 
 | |
| (* Author: Hongwei Xi *)
 | |
| (* Authoremail: hwxi AT cs DOT bu DOT edu *)
 | |
| (* Start time: December, 2012 *)
 | |
| 
 | |
| (* ****** ****** *)
 | |
| //
 | |
| // HX: shared by linset_listord (* ordered list *)
 | |
| // HX: shared by linset_avltree (* AVL-tree-based *)
 | |
| //
 | |
| (* ****** ****** *)
 | |
| //
 | |
| // HX-2013-02:
 | |
| // for sets of nonlinear elements
 | |
| //
 | |
| absvtype set_vtype (a:t@ype+) = ptr
 | |
| //
 | |
| (* ****** ****** *)
 | |
| 
 | |
| vtypedef set (a:t0p) = set_vtype (a)
 | |
| 
 | |
| (* ****** ****** *)
 | |
| 
 | |
| fun{a:t0p}
 | |
| compare_elt_elt (x1: a, x2: a):<> int
 | |
| 
 | |
| (* ****** ****** *)
 | |
| 
 | |
| fun{} linset_nil{a:t0p} ():<> set(a)
 | |
| fun{} linset_make_nil{a:t0p} ():<> set(a)
 | |
| 
 | |
| (* ****** ****** *)
 | |
| 
 | |
| fun{a:t0p} linset_sing (x: a):<!wrt> set(a)
 | |
| fun{a:t0p} linset_make_sing (x: a):<!wrt> set(a)
 | |
| 
 | |
| (* ****** ****** *)
 | |
| 
 | |
| fun{a:t0p}
 | |
| linset_make_list (xs: List(INV(a))):<!wrt> set(a)
 | |
| 
 | |
| (* ****** ****** *)
 | |
| 
 | |
| fun{}
 | |
| linset_is_nil {a:t0p} (xs: !set(INV(a))):<> bool
 | |
| fun{}
 | |
| linset_isnot_nil {a:t0p} (xs: !set(INV(a))):<> bool
 | |
| 
 | |
| (* ****** ****** *)
 | |
| 
 | |
| fun{a:t0p} linset_size (!set(INV(a))): size_t
 | |
| 
 | |
| (* ****** ****** *)
 | |
| 
 | |
| fun{a:t0p}
 | |
| linset_is_member (xs: !set(INV(a)), x0: a):<> bool
 | |
| fun{a:t0p}
 | |
| linset_isnot_member (xs: !set(INV(a)), x0: a):<> bool
 | |
| 
 | |
| (* ****** ****** *)
 | |
| 
 | |
| fun{a:t0p}
 | |
| linset_copy (!set(INV(a))):<!wrt> set(a)
 | |
| fun{a:t0p}
 | |
| linset_free (xs: set(INV(a))):<!wrt> void
 | |
| 
 | |
| (* ****** ****** *)
 | |
| //
 | |
| fun{a:t0p}
 | |
| linset_insert
 | |
|   (xs: &set(INV(a)) >> _, x0: a):<!wrt> bool
 | |
| //
 | |
| (* ****** ****** *)
 | |
| //
 | |
| fun{a:t0p}
 | |
| linset_takeout
 | |
| (
 | |
|   &set(INV(a)) >> _, a, res: &(a?) >> opt(a, b)
 | |
| ) :<!wrt> #[b:bool] bool(b) // endfun
 | |
| fun{a:t0p}
 | |
| linset_takeout_opt (&set(INV(a)) >> _, a):<!wrt> Option_vt(a)
 | |
| //
 | |
| (* ****** ****** *)
 | |
| //
 | |
| fun{a:t0p}
 | |
| linset_remove
 | |
|   (xs: &set(INV(a)) >> _, x0: a):<!wrt> bool
 | |
| //
 | |
| (* ****** ****** *)
 | |
| //
 | |
| // HX: choosing an element in an unspecified manner
 | |
| //
 | |
| fun{a:t0p}
 | |
| linset_choose
 | |
| (
 | |
|   xs: !set(INV(a)), x: &a? >> opt (a, b)
 | |
| ) :<!wrt> #[b:bool] bool(b)
 | |
| //
 | |
| fun{a:t0p}
 | |
| linset_choose_opt (xs: !set(INV(a))):<!wrt> Option_vt(a)
 | |
| //
 | |
| (* ****** ****** *)
 | |
| 
 | |
| fun{a:t0p}
 | |
| linset_takeoutmax
 | |
| (
 | |
|   xs: &set(INV(a)) >> _, res: &a? >> opt(a, b)
 | |
| ) :<!wrt> #[b:bool] bool (b)
 | |
| fun{a:t0p}
 | |
| linset_takeoutmax_opt (xs: &set(INV(a)) >> _):<!wrt> Option_vt(a)
 | |
| 
 | |
| (* ****** ****** *)
 | |
| 
 | |
| fun{a:t0p}
 | |
| linset_takeoutmin
 | |
| (
 | |
|   xs: &set(INV(a)) >> _, res: &a? >> opt(a, b)
 | |
| ) :<!wrt> #[b:bool] bool (b)
 | |
| fun{a:t0p}
 | |
| linset_takeoutmin_opt (xs: &set(INV(a)) >> _):<!wrt> Option_vt(a)
 | |
| 
 | |
| (* ****** ****** *)
 | |
| //
 | |
| fun{}
 | |
| fprint_linset$sep (FILEref): void // ", "
 | |
| //
 | |
| fun{a:t0p}
 | |
| fprint_linset (out: FILEref, xs: !set(INV(a))): void
 | |
| //
 | |
| overload fprint with fprint_linset
 | |
| //
 | |
| (* ****** ****** *)
 | |
| //
 | |
| fun{
 | |
| a:t0p}{env:vt0p
 | |
| } linset_foreach$fwork
 | |
|   (x: a, env: &(env) >> _): void
 | |
| //
 | |
| fun{a:t0p}
 | |
| linset_foreach (set: !set(INV(a))): void
 | |
| fun{
 | |
| a:t0p}{env:vt0p
 | |
| } linset_foreach_env
 | |
|   (set: !set(INV(a)), env: &(env) >> _): void
 | |
| // end of [linset_foreach_env]
 | |
| //
 | |
| (* ****** ****** *)
 | |
| 
 | |
| fun{a:t0p}
 | |
| linset_listize (xs: set(INV(a))): List0_vt (a)
 | |
| 
 | |
| (* ****** ****** *)
 | |
| 
 | |
| fun{a:t0p}
 | |
| linset_listize1 (xs: !set(INV(a))): List0_vt (a)
 | |
| 
 | |
| (* ****** ****** *)
 | |
| 
 | |
| (* end of [linset.hats] *)
 |