<HTML><HEAD><link type="text/css" href="../css/main_styles.css" rel="stylesheet"></HEAD>
<BODY><TITLE>%mqc_check_reserved_layer</TITLE><H1>%mqc_check_reserved_layer </H1><P CLASS="Paragraph">Classname: <B>%mqc_check_reserved_layer </B></P><P CLASS="Paragraph">Inherits from: <B><A href=..\checkmate\xug_base_checker.html>%ug_base_checker </A></B></P><PRE STYLE=\"text-align : left;\" CLASS=\"Code\"> </PRE><PRE STYLE=\"text-align : left;\" CLASS=\"Code\"> 
<B>Description:</B>
    Validate that the reserved layers are empty
 Parameters:
       (String ) layer_spec_string:    -  A special format of string which describes the reserved layers.
                                          This is a mandatory parameter.
                                          The reserved layers range description string may
                                          contain multiple range descriptions separated by commas,
                                          e.g. "1,3-5,7,9"
                                            means layer 1, plus layers 3 to 5
                                            plus layer 7, and layer 9.
       (Boolean)  disabled?             -    If it is true, the checker is disabled.
                                            Default is False.
    (Boolean)  save_log_in_part         -  The flag indicates whether the checking results can
                                           be saved to the part file
                                           Default is True.
       (Integer) log_type:              -  Indicate which logging type to use to report
                                           the violation
                                           1 - log error
                                           2 - log warning
                                           3 - log information
                                           The default value is 1 which is to log error.
       (String)  log_msg:               -  User defined message to be added when the system
                                           reports the violation.
                                           The default is no additional message.
 Results:
   PASS - if all reserved layers are empty.
   FAILED - if any reserved layer is not empty.
============================================================================================
  Create a new checker from this template by providing the mandatory parameters:
    1. (Must) change the class name and the category name
    2. (Must) specify the reserved layers range description string:
        (String)    layer_spec_string:   "1-5,20-30";
    3. (Optional) change log type:
        (Integer)    log_type:   1;
=============================================================================================
</PRE><PRE><FONT COLOR= blue>DefClass: %mqc_check_reserved_layer( %ug_base_checker );
</FONT></PRE><PRE STYLE=\"text-align : left;\" CLASS=\"Code\">  Check-Mate attributes and parameters </PRE><DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\"><FONT COLOR=blue>( String )                        %test_category: "Template.File Structure";
( String )                        %displayed_name: "Check Reserved Layer";

</SPAN></FONT></PRE></DIV><DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\"><FONT COLOR=blue>( Boolean Parameter )             disabled?: false;
( Boolean Parameter )             save_log_in_part: true;
</SPAN></FONT></PRE></DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\">  Checker specific parameters and attributes</PRE><DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\"><FONT COLOR=blue>( String Parameter )             layer_spec_string: "";
</SPAN></FONT></PRE></DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\">  parameter for log_option                                       </PRE><DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\"><FONT COLOR=blue>( String )                       layer_spec_string_label: "Reserved Layers";

</SPAN></FONT></PRE></DIV><DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\"><FONT COLOR=blue>( List )                         log_type_option: { LOG_ERROR, LOG_WARNING, LOG_INFO };
( String )                       log_type_label: "Log Option";

 # parameter for log_message     
</SPAN></FONT></PRE></DIV><DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\"><FONT COLOR=blue>( Integer Parameter Modifiable ) log_type: 1;
( String Parameter )              log_msg: "";
</SPAN></FONT></PRE></DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\">  checking ...</PRE><DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\"><FONT COLOR=blue>( String )                        log_msg_label: "Log Message";


( Boolean )   is_valid_layer?:  If ( layer_spec_string: = "" ) & ( layer_spec_string: = noValue )
                                Then  false
                                Else  ug_rexp_match( layer_spec_string: , "[0-9][0-9,\-]{0,}" );
</SPAN></FONT></PRE></DIV><DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\"><FONT COLOR=blue>( Any Uncached ) do_check: 

                 If  layer_spec_string: = ""

                 Then  ug_mqc_empty_param_warning()

                 Else If  ( -is_valid_layer?: )

                 Then  ug_mqc_log( LOG_WARNING, {}, "Invalid layer string." )

                 Else
                 @{
                      $empty_layers << mqc_askEmptyLayers();

                      $reserved_layers << mqc_string_layers_to_list:( layer_spec_string: );
                      $false_layers << SetDifference( $reserved_layers, $empty_layers );
                      If  -( Empty?( $false_layers ) )
                      Then
                      @{
                          $sorted_layer_list << Sort( $false_layers, Ascending );

                          $usr_msg << If ( "" = log_msg: ) Then "" Else log_msg: + "~n";
                          $write_log << Loop
                          {
                              For  $layer_num  In  $sorted_layer_list;
                              For  $detail_msg Is  "Reserved layer " + 
                                                   Stringvalue( $layer_num ) + " is not empty.";

                              Do  ug_mqc_log( Nth( log_type:, log_type_option: ), {}, 
                                              $usr_msg + $detail_msg );
                          };
                      }
                      Else
                          donothing;
                 };


</SPAN></FONT></PRE></DIV><DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\"><FONT COLOR=blue>(Method list) mqc_string_layers_to_list:( string $string_layers )
@{
     $proto_layers << Splitstring( $string_layers, "," );
     $proto_layers_list << Loop
     {
        For  $item  In  $proto_layers;
        For  $split_list Is  Splitstring( $item, "-" );
        For  $sub_layer_list  Is
             If  ( 1 = Length( $split_list ) )
             Then  { Makenumber( First( $split_list ) ) }
             Else
             @{
                  $number_list << { Makenumber( First( $split_list ) ), 
                                    Makenumber( Second( $split_list ) ) };
                  $head << MinList( $number_list );
                  $tail << maxList( $number_list );

                  SetDifference( Makelargelist( $tail + 1 ), Makelargelist( $head ) );

             };
        Append  $sub_layer_list;
     };

     RemoveDuplicates( $proto_layers_list );
};

</SPAN></FONT></PRE></DIV></TABLE><p class=EndLine>&nbsp;</p><p class=blank>&nbsp;</p></BODY></HTML>