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