| Home | Libraries | People | FAQ | More

#### Ring Concept

###### Description

The Ring Concept describes the requirements for a ring type. All algorithms in Boost.Geometry will check any geometry arguments against the concept requirements.

| Note
Also called linear ring, but we explicitly refer to a filled feature here

###### Concept Definition

The Ring Concept is defined as following:

- there must be a specialization of `traits::tag` defining `ring_tag` as type
- it must behave like a Boost.Range Random Access Range
- The type defined by the metafunction `range_value<...>::type` must fulfill the Point Concept
- there might be a specialization of `traits::point_order` defining the order or orientation of its points, `clockwise` or `counterclockwise`
- there might be a specialization of `traits::closure` defining the closure, `open` or `closed`

###### Rules

Besides the Concepts, which are checks on compile-time, there are rules that valid rings must fulfill. See the Polygon Concept for more information on the rules a polygon (and also a ring) must fulfill.

###### Available Models

- ring
- a Boost.Polygon polygon_data (requires `#include boost/geometry/geometries/adapted/boost_polygon/ring.hpp>`)
- a std::vector (requires `#include boost/geometry/geometries/adapted/std_as_ring.hpp>`)
- a std::deque (requires `#include boost/geometry/geometries/adapted/std_as_ring.hpp>`)

| Note
See also the sample in the Boost.Range documentation showing how a type can be adapted to a Boost.Range to fulfill the concept of a Ring