====== Adapter ======
Ein Adapter ist ein Codestück, was vergleichbar mit einem Workflow ist, da er über zwei Wege bedient wird. Gewissermaßen ein Cast in zwei Richtungen
Folgendes Problem:
bool IndexPolygon::completeHullPolygons( const Array& faces,
Array& halfEdges,
Array>* nonUniques,
Array* nonCorresponding )
{
IndexPolygon::extractHalfEdgesFromPolygons( faces, halfEdges );
//ATR64FIXME
return IndexHalfEdge::unique( halfEdges, nonUniques ) &&
IndexHalfEdge::hasCompleteCorrespondencies( halfEdges, nonCorresponding );
}
Die Funktion unique erwartet als 2. Parameter ein Array>*.
Nun steht hier nicht klar fest, ob das ein Ein- oder Ausgabeparameter ist.
Man könnte nun einen Adapter formulieren, der Werte von Array> nach Array> konvertiert und - sobald die Funktion fertig gelaufen ist, das resultierende Array wieder nach nonUniques zurückspielt.
adapt
{
std::size_t get int = static_cast< std::size_t >( value );
int set( std::size_t rhs ) = value : static_cast< int >( rhs );
int get std::size_t = static_cast< int >( value );
std::size_t set( int rhs ) = value : static_cast< std::size_t >( rhs );
Array> get( Array> )
{
return Array>( ... );
}
Array> set( Array> )
{
return Array>( ... )
}
// Man könnte nun auch überlegen, virtuelle Funktionen umzubelegen:
std::pair< int, int > Array>::operator[](size_t index) get Array>::operator[]( size_t )
{
pair is ref : this[index];
return std::pair< std::size_t, std::size_t >( adapt pair.left, adapt pair.right ); // Werte werden nach Rückkehr der Funktoin anschließend ins pair zurückgeschrieben
}
}