drc_proto: wip adding accessors to DRC_RULE/DRC_RULE_CONDITION

This commit is contained in:
Tomasz Wlostowski 2020-08-27 00:07:15 +02:00
parent 8e4a3f5e65
commit 05b88acf16
3 changed files with 31 additions and 12 deletions

View File

@ -27,13 +27,14 @@
#include <class_board_item.h>
#include <drc_proto/drc_rule.h>
#include <drc_proto/drc_engine.h>
#include <pcb_expr_evaluator.h>
test::DRC_RULE::DRC_RULE() :
m_Unary( false ),
m_Enabled( true ),
m_Priority( 0 ),
m_priority( 0 ),
m_Severity( DRC_RULE_SEVERITY_T::DRC_SEVERITY_ERROR ),
m_condition( nullptr )
{
@ -50,9 +51,13 @@ void test::DRC_RULE::AddConstraint( DRC_CONSTRAINT& aConstraint )
m_constraints.push_back( aConstraint );
}
test::DRC_RULE_CONDITION::DRC_RULE_CONDITION()
test::DRC_RULE_CONDITION::DRC_RULE_CONDITION( const wxString& aExpression,
const LSET aLayerCondition ) :
m_expression( aExpression ),
m_layerCondition ( aLayerCondition ),
m_ucode ( nullptr )
{
m_ucode = nullptr;
}
@ -91,6 +96,12 @@ bool test::DRC_RULE_CONDITION::Compile( REPORTER* aReporter, int aSourceLine, in
PCB_EXPR_CONTEXT preflightContext( F_Cu );
bool ok = compiler.Compile( m_expression, m_ucode.get(), &preflightContext );
if(!ok)
{
drc_dbg(1, "Error: %s", compiler.GetError().message );
}
return ok;
}

View File

@ -110,8 +110,9 @@ private:
class DRC_CONSTRAINT
{
public:
DRC_CONSTRAINT() :
m_Type( DRC_CONSTRAINT_TYPE_T::DRC_CONSTRAINT_TYPE_UNKNOWN ),
DRC_CONSTRAINT( DRC_CONSTRAINT_TYPE_T aType = DRC_CONSTRAINT_TYPE_T::DRC_CONSTRAINT_TYPE_UNKNOWN
) :
m_Type( aType ),
m_DisallowFlags( 0 ),
m_LayerCondition( LSET::AllLayersMask() ),
m_parentRule( nullptr ) // fixme
@ -152,12 +153,15 @@ public:
virtual bool IsEnabled() const { return m_Enabled; }
virtual bool HasSpecificItemSet() const { return false; };
virtual void FillSpecificItemSet( std::vector<BOARD_ITEM*> specificItems ) { };
virtual void FillSpecificItemSet( std::set<BOARD_ITEM*> specificItems ) { };
void SetPriority( int aPriority ) { m_priority = aPriority; }
int GetPriority() const { return m_priority; }
int GetPriority() const { return m_Priority; }
DRC_RULE_SEVERITY_T GetSeverity() const { return m_Severity; }
const wxString GetName() const { return m_Name; }
void SetName( const wxString& aName ) { m_name = aName; }
const wxString GetName() const { return m_name; }
std::vector<DRC_CONSTRAINT>& Constraints()
{
@ -186,24 +190,28 @@ public:
m_layerCondition = aLayerCondition;
}
private:
wxString m_name;
int m_priority; // 0 indicates automatic priority generation fixme: use enum
public:
bool m_Unary;
wxString m_Name;
LSET m_layerCondition;
DRC_RULE_CONDITION* m_condition; // fixme: consider unique_ptr
std::vector<DRC_CONSTRAINT> m_constraints;
DRC_RULE_SEVERITY_T m_Severity;
bool m_Enabled;
int m_Priority; // 0 indicates automatic priority generation
};
class DRC_RULE_CONDITION
{
public:
DRC_RULE_CONDITION();
DRC_RULE_CONDITION( const wxString& aExpression = "",
const LSET aLayerCondition = LSET::AllLayersMask() );
~DRC_RULE_CONDITION();
bool EvaluateFor( const BOARD_ITEM* aItemA, const BOARD_ITEM* aItemB,

View File

@ -169,7 +169,7 @@ test::DRC_RULE* test::DRC_RULES_PARSER::parseDRC_RULE()
if( !IsSymbol( token ) )
reportError( _( "Missing rule name." ) );
rule->m_Name = FromUTF8();
rule->SetName( FromUTF8() );
for( token = NextTok(); token != T_RIGHT; token = NextTok() )
{