ConnectionRelation.cpp
#include "StdAfx.h"
#include "ConnectionRelation.h"
#include "Link.h"
using namespace Core;
using namespace System;
using namespace System::Diagnostics;
/// [ Constructor ]
ConnectionRelation::ConnectionRelation( Link^ upper, Link^ equal, Link^ lower ) :
m_upper( upper ),
m_equal( equal ),
m_lower( lower )
{
// データを確認する
CheckData();
}
/// [ Constructor ]
ConnectionRelation::ConnectionRelation( Link^ upper, Links^ links, System::Xml::XmlElement^ element ) :
m_upper( upper )
{
Xml::XmlElement^ node = element[ "connection" ];
if( node != nullptr )
{
// 取得できたならば、属性から設定する
m_equal = GetLink( links, node->GetAttribute( "equal" ) );
m_lower = GetLink( links, node->GetAttribute( "lower" ) );
}
// データを確認する
CheckData();
}
/// リンクを取得する
Link^ ConnectionRelation::GetLink( Links^ links, System::String^ linkName )
{
if( linkName != String::Empty )
{
for each( Link^ link in links )
{
Debug::Assert( link != nullptr, "リンクは生成されている" );
if( link->Name == linkName )
{
// リンクの名称が一致したならば、そのリンクを返す
return link;
}
}
Debug::Fail( "指定されたリンクが存在しない" );
}
return nullptr;
}
/// データを確認する
void ConnectionRelation::CheckData()
{
Debug::Assert(
( m_upper != nullptr ) ||
( m_equal != nullptr ) ||
( m_lower != nullptr ),
"どこかに接続している"
);
if( m_upper != nullptr )
{
Debug::Assert( m_upper != m_equal, "同じところには接続されない" );
}
if( m_equal != nullptr )
{
Debug::Assert( m_equal != m_lower, "同じところには接続されない" );
}
if( m_lower != nullptr )
{
Debug::Assert( m_lower != m_upper, "同じところには接続されない" );
}
Debug::Assert(
!( ( m_upper == nullptr ) && ( m_equal != nullptr ) ),
"接続元がない(最上位に位置する)ものは、対等な関係を持たない"
);
}
/// データを確認する
void ConnectionRelation::CheckData( Link^ ownLink )
{
Debug::Assert(
( ownLink != m_upper ) &&
( ownLink != m_equal ) &&
( ownLink != m_lower ),
"自分自身には接続されない"
);
}
/// インスタンスの説明を文字列で返す
String^ ConnectionRelation::ToString()
{
return String::Format(
"上方:{0} 対等:{1} 下方:{2}",
( Upper != nullptr )? Upper->Name : "---",
( Equal != nullptr )? Equal->Name : "---",
( Lower != nullptr )? Lower->Name : "---"
);
}