diff options
| author | Alan Mishchenko <alanmi@berkeley.edu> | 2014-04-23 11:31:38 -0700 | 
|---|---|---|
| committer | Alan Mishchenko <alanmi@berkeley.edu> | 2014-04-23 11:31:38 -0700 | 
| commit | d948ef80bd71789617b38b9b509751a4037cf772 (patch) | |
| tree | 99e0e382f785a8dfa767b730648687dfc4c6ac97 /src | |
| parent | 47142c084b52659356cfd85182dec03d07e87380 (diff) | |
| download | abc-d948ef80bd71789617b38b9b509751a4037cf772.tar.gz abc-d948ef80bd71789617b38b9b509751a4037cf772.tar.bz2 abc-d948ef80bd71789617b38b9b509751a4037cf772.zip  | |
Added command 'cubeenum'.
Diffstat (limited to 'src')
| -rw-r--r-- | src/base/abci/abc.c | 53 | 
1 files changed, 53 insertions, 0 deletions
diff --git a/src/base/abci/abc.c b/src/base/abci/abc.c index 59a0e38b..00ff365f 100644 --- a/src/base/abci/abc.c +++ b/src/base/abci/abc.c @@ -272,6 +272,7 @@ static int Abc_CommandExtWin                 ( Abc_Frame_t * pAbc, int argc, cha  static int Abc_CommandInsWin                 ( Abc_Frame_t * pAbc, int argc, char ** argv );  static int Abc_CommandPermute                ( Abc_Frame_t * pAbc, int argc, char ** argv );  static int Abc_CommandUnpermute              ( Abc_Frame_t * pAbc, int argc, char ** argv ); +static int Abc_CommandCubeEnum               ( Abc_Frame_t * pAbc, int argc, char ** argv );  static int Abc_CommandCec                    ( Abc_Frame_t * pAbc, int argc, char ** argv );  static int Abc_CommandDCec                   ( Abc_Frame_t * pAbc, int argc, char ** argv ); @@ -841,6 +842,7 @@ void Abc_Init( Abc_Frame_t * pAbc )      Cmd_CommandAdd( pAbc, "Sequential",   "inswin",        Abc_CommandInsWin,           1 );      Cmd_CommandAdd( pAbc, "Sequential",   "permute",       Abc_CommandPermute,          1 );      Cmd_CommandAdd( pAbc, "Sequential",   "unpermute",     Abc_CommandUnpermute,        1 ); +    Cmd_CommandAdd( pAbc, "Sequential",   "cubeenum",      Abc_CommandCubeEnum,         0 );      Cmd_CommandAdd( pAbc, "Verification", "cec",           Abc_CommandCec,              0 );      Cmd_CommandAdd( pAbc, "Verification", "dcec",          Abc_CommandDCec,             0 ); @@ -19395,6 +19397,57 @@ usage:      return 1;  } +/**Function************************************************************* + +  Synopsis    [] + +  Description [] + +  SideEffects [] + +  SeeAlso     [] + +***********************************************************************/ +int Abc_CommandCubeEnum( Abc_Frame_t * pAbc, int argc, char ** argv ) +{ +    extern void Abc_EnumerateCubeStates(); +    extern void Abc_EnumerateCubeStatesZdd(); +    int c, fZddAlgo = 0, fVerbose = 0; +    Extra_UtilGetoptReset(); +    while ( ( c = Extra_UtilGetopt( argc, argv, "zvh" ) ) != EOF ) +    { +        switch ( c ) +        { +        case 'z': +            fZddAlgo ^= 1; +            break; +        case 'v': +            fVerbose ^= 1; +            break; +        case 'h': +            goto usage; +        default: +            Abc_Print( -2, "Unknown switch.\n"); +            goto usage; +        } +    } +    if ( fZddAlgo ) +        Abc_EnumerateCubeStatesZdd(); +    else +        Abc_EnumerateCubeStates(); +    return 0; + +usage: +    Abc_Print( -2, "usage: cubeenum [-vh]\n" ); +    Abc_Print( -2, "\t         enumerates reachable states of 2x2x2x cube\n" ); +    Abc_Print( -2, "\t         (http://en.wikipedia.org/wiki/Pocket_Cube)\n" ); +    Abc_Print( -2, "\t-z     : toggle using ZDD-based algorithm [default = %s]\n", fZddAlgo? "yes": "no" ); +    Abc_Print( -2, "\t-v     : toggle verbose output [default = %s]\n", fVerbose? "yes": "no" ); +    Abc_Print( -2, "\t-h     : print the command usage\n"); +    return 1; +} + +  /**Function*************************************************************  | 
