⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 utility.jam

📁 C++的一个好库。。。现在很流行
💻 JAM
字号:
#  (C) Copyright David Abrahams 2001. Permission to copy, use, modify, sell and
#  distribute this software is granted provided this copyright notice appears in
#  all copies. This software is provided "as is" without express or implied
#  warranty, and with no claim as to its suitability for any purpose.

import "class" : is-instance ;
import errors ;

rule ungrist ( names * )
{
    local result ;
    for local name in $(names)
    {
        local stripped = [ MATCH ^<(.*)>$ : $(name) ] ;
        if ! $(stripped)
        {
            errors.error "in ungrist" $(names) : $(name) is not of the form <.*> ;
        }
        result += $(stripped) ;
    }
    return $(result) ;
}

# Return the file of the caller of the rule that called caller-file.
rule caller-file ( )
{
    local bt = [ BACKTRACE ] ;
    return $(bt[9]) ;
}

# Returns the textual representation of argument. If it is a class
# instance, class its 'str' method. Otherwise, returns the argument.
rule str ( value )
{
    if [ is-instance $(value) ] 
    {
        return [ $(value).str ] ;
    }
    else
    {
        return $(value) ;
    }            
}

# Tests if 'a' is equal to 'b'. If 'a' is a class instance,
# calls its 'equal' method. Uses ordinary jam's comparison otherwise.
rule equal ( a b )
{
    if [ is-instance $(a) ] 
    {
        return [ $(a).equal $(b) ] ;
    }
    else
    {
        if $(a) = $(b) 
        {
            return true ;
        }
    }
}

# Tests if 'a' is less than 'b'. If 'a' is a class instance, 
# calls its 'less' method. Uses ordinary jam's comparison otherwise.
rule less ( a b )
{
    if [ is-instance $(a) ]
    {
        return [ $(a).less $(b) ] ;
    }
    else
    {
        if $(a) < $(b)
        {
            return true ;
        }
    }
}

# For all elements of 'list' which do not already have 'suffix',
# add 'suffix'.
rule apply-default-suffix ( suffix : list * )
{
    local result ;
    for local i in $(list)
    {
        if $(i:S) = $(suffix)
        {
            result += $(i) ;
        }
        else
        {
            result += $(i)$(suffix) ;
        }        
    }
    return $(result) ;    
}

# If 'name' contains a dot, returns the part before the last dot.
# If 'name' contains no dot, returns it unmodified.
rule basename ( name )
{    
    if $(name:S)
    {
        name = $(name:B) ;
    }
    return $(name) ;
}



local rule __test__ ( )
{
    import assert ;
    import "class" : new ;
    assert.result foo bar : ungrist <foo> <bar> ;

    assert.result 123 : str 123 ;

    class test-class__ 
    {
        rule __init__ ( )
        {            
        }
        
        rule str ( )
        {
            return "str-test-class" ;
        }

        rule less ( a )
        {
            return "yes, of course!" ;
        }

        rule equal ( a )
        {
            return "not sure" ;
        }
    }

    assert.result "str-test-class" : str [ new test-class__ ] ;
    assert.true less 1 2 ;
    assert.false less 2 1 ;
    assert.result "yes, of course!" : less [ new test-class__ ] 1 ;
    assert.true equal 1 1 ;
    assert.false equal 1 2 ;
    assert.result "not sure" : equal [ new test-class__ ] 1 ;
    
    assert.result foo.lib foo.lib : apply-default-suffix .lib : foo.lib foo.lib ;
    
    assert.result foo : basename foo ;
    assert.result foo : basename foo.so ;
    assert.result foo.so : basename foo.so.1 ;
}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -