# FreeMonoidProduct< F, S > Struct Template Reference
[Fmp]

Implementation of a monoid which is a product of two free monoids. More...

Inheritance diagram for FreeMonoidProduct< F, S >:
[legend]

List of all members.

## Public Types

typedef F | first_monoid_t
| The type of free monoid A*.
typedef S | second_monoid_t
| The type of free monoid B*.
typedef FreeMonoidProduct< F, S > | self_t
| Exact type of the most derived type in the hierarchy.

## Public Member Functions

| FreeMonoidProduct (const F &a, const S &b)
| Constructor based on two free monoids.
| FreeMonoidProduct (const F &a, const S &b, monoid_rep_t mr)
| Constructor with explicit representation.
| FreeMonoidProduct (const FreeMonoidProduct &w)
| Copy constructor.
first_monoid_t & | first_monoid ()
| Monoid's accessor.
const first_monoid_t & | first_monoid () const
| First monoid's const accessor.
second_monoid_t & | second_monoid ()
| Second monoid's accessor.
const second_monoid_t & | second_monoid () const
| Second monoid's const accessor.
const shared_monoid_rep_t | representation () const
| Representation's accessor.
void | set_representation (monoid_rep_t mr)
| Change the monoid representation to the new one provided.
Element< FreeMonoidProduct< F, S >, T > | identity (SELECTOR(T)) const
| Returns the identity of the monoid (if mul_kind).
Element< FreeMonoidProduct< F, S >, T > | zero (SELECTOR(T)) const
| Returns the zero of the monoid (if add_kind).
bool | contains (const Element< FreeMonoidProduct< F, S >, T > &elt) const
| Check if a given element is compatible with the structural element.
bool | contains (const Element< OtherS, T > &other) const
| Specialization of `contains` that always returns false.
bool | contains (const T &elt_value) const
| Check if an anonymous value is compatible with a structural element.
Element< FreeMonoidProduct< F, S >, T > | choose (SELECTOR(T)) const
| Choose randomly an element in the structure.
self_t & | self ()
| Accessor to the real type.
const self_t & | self () const
| Accessor to the real type.

## Detailed Description

### template<class F, class S>
struct vcsn::algebra::FreeMonoidProduct< F, S >

Implementation of a monoid which is a product of two free monoids.

Definition at line 116 of file freemonoid_product.hh.

## Member Function Documentation

FreeMonoidProduct< F, S >::first_monoid_t & first_monoid | ( |  | ) |

Monoid's accessor.

Bug:
  FIXME: this interface should not exist (s.e. are const once instantiated)

Reimplemented from FreeMonoidProductBase< FreeMonoidProduct< F, S > >.

Definition at line 208 of file freemonoid_product.hxx.

bool contains | ( | const Element< OtherS, T > & | other | ) | const`[inherited]`

Specialization of `contains` that always returns false.

Indeed, elements structured by a particular type are always incompatible with structural elements of another type.

self_t& self | ( |  | ) | `[inherited]`

Accessor to the real type.

To be used by implementations in this class and derived structures to obtain a reference to the structural element with its most derived type.

const self_t& self | ( |  | ) | const`[inherited]`

Accessor to the real type.

To be used by implementations in this class and derived structures to obtain a reference to the structural element with its most derived type.