#line 170 "/home/ubuntu/felix/src/packages/stl.fdoc"
include "stl/stl";
class Stl_Set[t]
{
requires Cxx_headers::set;
type stl_set = "::std::set<?1>";
type stl_set_iterator = "::std::set<?1>::iterator";
type stl_set_reverse_iterator = "::std::set<?1>::reverse_iterator";
fun create : unit -> stl_set = "(FLX_GXX_PARSER_HACK std::set<?1>())";
proc insert : stl_set * t = "$1.insert($2);";
fun find : stl_set * t -> stl_set_iterator = "$1.find($2)";
fun mem : stl_set * t -> bool = "$1.find($2) != $1.end()";
instance Eq[Stl_Set::stl_set] {
fun == : Stl_Set::stl_set * Stl_Set::stl_set -> bool = "$1==$2";
}
instance Container[Stl_Set::stl_set,t] {
fun len: Stl_Set::stl_set -> size = "$1.size()";
fun empty: Stl_Set::stl_set -> bool = "$1.empty()";
}
instance Sequence[Stl_Set::stl_set,Stl_Set::stl_set_iterator,t] {
fun begin : Stl_Set::stl_set-> Stl_Set::stl_set_iterator= "$1.begin()";
fun end : Stl_Set::stl_set-> Stl_Set::stl_set_iterator= "$1.end()";
proc erase : Stl_Set::stl_set * Stl_Set::stl_set_iterator = "$1.erase($1);";
proc erase_between : Stl_Set::stl_set * Stl_Set::stl_set_iterator * Stl_Set::stl_set_iterator = "$1.erase($1,$2);";
proc clear : Stl_Set::stl_set = "$1.clear();";
}
instance Reversible_Sequence[Stl_Set::stl_set,Stl_Set::stl_set_iterator,Stl_Set::stl_set_reverse_iterator,t] {
fun rbegin : Stl_Set::stl_set-> Stl_Set::stl_set_reverse_iterator= "$1.rbegin()";
fun rend : Stl_Set::stl_set-> Stl_Set::stl_set_reverse_iterator= "$1.rend()";
}
instance Eq[stl_set_iterator] {
fun == : stl_set_iterator * stl_set_iterator -> bool = "$1==$2";
}
instance Tord[stl_set_iterator] {
fun < : stl_set_iterator * stl_set_iterator -> bool = "$1<$2";
}
instance Iterator[stl_set_iterator,t] {
fun deref : stl_set_iterator -> t = "*(#0*)(void*)&*$1";
}
instance ForwardSequence[stl_set_iterator] {
fun succ: stl_set_iterator -> stl_set_iterator = "$1+1";
proc pre_incr : &stl_set_iterator = "++*$1;";
proc post_incr : &stl_set_iterator = "++*$1;";
}
instance Forward_iterator[stl_set_iterator,t] {}
instance BidirectionalSequence[stl_set_iterator] {
fun pred: stl_set_iterator -> stl_set_iterator = "$1-1;";
proc pre_decr : &stl_set_iterator = "--*$1;";
proc post_decr : &stl_set_iterator = "--*$1;";
}
instance Bidirectional_iterator[stl_set_iterator,t] {}
instance Eq[stl_set_reverse_iterator] {
fun == : stl_set_reverse_iterator * stl_set_reverse_iterator -> bool = "$1==$2";
}
instance Tord[stl_set_reverse_iterator] {
fun < : stl_set_reverse_iterator * stl_set_reverse_iterator -> bool = "$1<$2";
}
instance Iterator[stl_set_reverse_iterator,t] {
fun deref : stl_set_reverse_iterator -> t = "*(#0*)(void*)&*$1";
}
instance ForwardSequence[stl_set_reverse_iterator] {
fun succ: stl_set_reverse_iterator -> stl_set_reverse_iterator = "$1+1";
proc pre_incr : &stl_set_reverse_iterator = "++*$1;";
proc post_incr : &stl_set_reverse_iterator = "++*$1;";
}
instance Forward_iterator[stl_set_reverse_iterator,t] {}
instance BidirectionalSequence[stl_set_reverse_iterator] {
fun pred: stl_set_reverse_iterator -> stl_set_reverse_iterator = "$1-1;";
proc pre_decr : &stl_set_reverse_iterator = "--*$1;";
proc post_decr : &stl_set_reverse_iterator = "--*$1;";
}
instance Bidirectional_iterator[stl_set_reverse_iterator,t] {}
}
open Stl_Set;
open[t] Reversible_Sequence[
Stl_Set::stl_set[t],
Stl_Set::stl_set_iterator[t],
Stl_Set::stl_set_reverse_iterator[t],t];
open[t] Bidirectional_iterator[Stl_Set::stl_set_iterator[t],t];
open[t] Bidirectional_iterator[Stl_Set::stl_set_reverse_iterator[t],t];