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

📄 value.cxx

📁 eCos1.31版
💻 CXX
📖 第 1 页 / 共 5 页
字号:
}// ----------------------------------------------------------------------------// set_flavor() may be invoked once or twice for a given entity. The first// time is from inside the constructor with the default flavor for this// particular class of entity. It may then be called again if the// entity has a "flavor" property that overrides this. All old data// will be lost, so evaluating a default value etc. should be done after// the call to set_flavor(), and there should be no subsequent calls to// set_flavor().voidCdlValue::set_flavor(CdlValueFlavor flavor_arg){    CYG_REPORT_FUNCNAME("CdlValue:: set_flavor");    CYG_REPORT_FUNCARG2XV(this, flavor_arg);        // No precondition here, set_flavor() is called from inside the constructor    CYG_PRECONDITIONC((CdlValueFlavor_None     == flavor_arg) || \                      (CdlValueFlavor_Bool     == flavor_arg) || \                      (CdlValueFlavor_BoolData == flavor_arg) || \                      (CdlValueFlavor_Data     == flavor_arg));    flavor = flavor_arg;    switch(flavor) {      case CdlValueFlavor_None :      {        // All value sources are enabled, but "default" remains the only valid one.        enabled[CdlValueSource_Default]       = true;        enabled[CdlValueSource_Inferred]      = true;        enabled[CdlValueSource_Wizard]        = true;        enabled[CdlValueSource_User]          = true;        break;      }                case CdlValueFlavor_Bool :      {        // All value sources start out as disabled.        enabled[CdlValueSource_Default]       = false;        enabled[CdlValueSource_Inferred]      = false;        enabled[CdlValueSource_Wizard]        = false;        enabled[CdlValueSource_User]          = false;        break;      }                case CdlValueFlavor_BoolData :      {        // All value sources start out as disabled.        enabled[CdlValueSource_Default]       = false;        enabled[CdlValueSource_Inferred]      = false;        enabled[CdlValueSource_Wizard]        = false;        enabled[CdlValueSource_User]          = false;        break;      }                case CdlValueFlavor_Data :      {        // All value sources start out as enabled.        enabled[CdlValueSource_Default]       = true;        enabled[CdlValueSource_Inferred]      = true;        enabled[CdlValueSource_Wizard]        = true;        enabled[CdlValueSource_User]          = true;        break;      }      default :        break;    }        CYG_REPORT_RETURN();}//}}}//{{{  Source manipulation                      // ----------------------------------------------------------------------------voidCdlValue::set_source(CdlValueSource source){    CYG_REPORT_FUNCNAME("CdlValue::set_source");    CYG_REPORT_FUNCARG2XV(this, source);    CYG_INVARIANT_THISC(CdlValue);    CYG_PRECONDITIONC((0 <= source) && (source <= CdlValue_number_of_sources));    CYG_PRECONDITIONC(source_valid[source]);    current_source = source;    CYG_REPORT_RETURN();}CdlValueSourceCdlValue::get_source(void) const{    CYG_REPORT_FUNCNAMETYPE("CdlValue::get_source", "source %d");    CYG_REPORT_FUNCARG1XV(this);    CYG_PRECONDITION_THISC();    CdlValueSource result = current_source;    CYG_REPORT_RETVAL(result);    return result;}boolCdlValue::has_source(CdlValueSource source) const{    CYG_REPORT_FUNCNAMETYPE("CdlValue::has_source", "result %d");    CYG_REPORT_FUNCARG2XV(this, source);    CYG_PRECONDITION_THISC();    CYG_PRECONDITIONC((0 <= source) && (source < CdlValue_number_of_sources));    bool result = source_valid[source];    CYG_REPORT_RETVAL(result);    return result;}// ----------------------------------------------------------------------------// Invalidate a specific source. If that source happens to be the current one,// switch to the highest-priority valid source.voidCdlValue::invalidate_source(CdlValueSource source){    CYG_REPORT_FUNCNAME("CdlValue::invalidate_source");    CYG_REPORT_FUNCARG2XV(this, source);    CYG_PRECONDITION_THISC();    CYG_PRECONDITIONC(CdlValueSource_Default != source);    CYG_PRECONDITIONC((0 <= source) && (source < CdlValue_number_of_sources));    if (CdlValueSource_Default != source) {        source_valid[source]        = false;        if (current_source == source) {            if (source_valid[CdlValueSource_User]) {                current_source = CdlValueSource_User;            } else if (source_valid[CdlValueSource_Wizard]) {                current_source = CdlValueSource_Wizard;            } else if (source_valid[CdlValueSource_Inferred]) {                current_source = CdlValueSource_Inferred;            } else {                current_source = CdlValueSource_Default;            }        }    }        CYG_POSTCONDITIONC(source_valid[current_source]);}//}}}//{{{  Retrieving the data                      // ----------------------------------------------------------------------------// Check the enabled flag for the appropriate source. The specified source// is normally provided by a default argument CdlValueSource_Current, which// 99.9...% of the time is what we are after.//// Note that this member can be used even for entities of flavor none// and data, and the result will be true. However it is not legal to// disable such entities.boolCdlValue::is_enabled(CdlValueSource source) const{    CYG_REPORT_FUNCNAMETYPE("CdlValue::is_enabled", "enabled %d");    CYG_REPORT_FUNCARG2XV(this, source);    CYG_PRECONDITION_THISC();    if (CdlValueSource_Current == source) {        source = current_source;    }    CYG_PRECONDITIONC((0 <= source) && (source < CdlValue_number_of_sources));    CYG_PRECONDITIONC(source_valid[source]);    bool result = enabled[source];    CYG_REPORT_RETVAL(result);    return result;}// ----------------------------------------------------------------------------// Access to the value field.std::stringCdlValue::get_value(CdlValueSource source) const{    CYG_REPORT_FUNCNAME("CdlValue::get_value");    CYG_REPORT_FUNCARG2XV(this, source);    CYG_PRECONDITION_THISC();    if (CdlValueSource_Current == source) {        source = current_source;    }    CYG_PRECONDITIONC((0 <= source) && (source < CdlValue_number_of_sources));    CYG_PRECONDITIONC(source_valid[source]);    std::string result = values[source].get_value();    CYG_REPORT_RETURN();    return result;}boolCdlValue::has_integer_value(CdlValueSource source) const{    CYG_REPORT_FUNCNAMETYPE("CdlValue::has_integer_value", "result %d");    CYG_REPORT_FUNCARG2XV(this, source);    CYG_INVARIANT_THISC(CdlValue);    if (CdlValueSource_Current == source) {        source = current_source;    }    CYG_PRECONDITIONC((0 <= source) && (source < CdlValue_number_of_sources));    CYG_PRECONDITIONC(source_valid[source]);    bool result = values[source].has_integer_value();    CYG_REPORT_RETVAL(result);    return result;}boolCdlValue::has_double_value(CdlValueSource source) const{    CYG_REPORT_FUNCNAMETYPE("CdlValue::has_value", "result %d");    CYG_REPORT_FUNCARG2XV(this, source);    CYG_INVARIANT_THISC(CdlValue);        if (CdlValueSource_Current == source) {        source = current_source;    }    CYG_PRECONDITIONC((0 <= source) && (source < CdlValue_number_of_sources));    CYG_PRECONDITIONC(source_valid[source]);    bool result = values[source].has_double_value();    CYG_REPORT_RETVAL(result);    return result;}cdl_intCdlValue::get_integer_value(CdlValueSource source) const{    CYG_REPORT_FUNCNAMETYPE("CdlValue::get_integer_value", "value %ld");    CYG_REPORT_FUNCARG2XV(this, source);    CYG_PRECONDITION_THISC();    if (CdlValueSource_Current == source) {        source = current_source;    }    CYG_PRECONDITIONC((0 <= source) && (source < CdlValue_number_of_sources));    CYG_PRECONDITIONC(source_valid[source]);    cdl_int result = values[source].get_integer_value();    CYG_REPORT_RETVAL(result);    return result;}doubleCdlValue::get_double_value(CdlValueSource source) const{    CYG_REPORT_FUNCNAME("CdlValue::get_double_value");    CYG_REPORT_FUNCARG2XV(this, source);    CYG_PRECONDITION_THISC();    if (CdlValueSource_Current == source) {        source = current_source;    }    CYG_PRECONDITIONC((0 <= source) && (source < CdlValue_number_of_sources));    CYG_PRECONDITIONC(source_valid[source]);    double result = values[source].get_double_value();    CYG_REPORT_RETURN();    return result;}CdlSimpleValueCdlValue::get_simple_value(CdlValueSource source) const{    CYG_REPORT_FUNCNAME("CdlValue::get_simple_value");    CYG_REPORT_FUNCARG2XV(this, source);    CYG_PRECONDITION_THISC();    if (CdlValueSource_Current == source) {        source = current_source;    }    CYG_PRECONDITIONC((0 <= source) && (source < CdlValue_number_of_sources));    CYG_PRECONDITIONC(source_valid[source]);    CYG_REPORT_RETURN();    return values[source];}//}}}//{{{  Value modification                       // ----------------------------------------------------------------------------voidCdlValue::set_enabled(bool val, CdlValueSource source){    CYG_REPORT_FUNCNAME("CdlValue::set_enabled");    CYG_REPORT_FUNCARG3XV(this, val, source);    CYG_INVARIANT_THISC(CdlValue);    CYG_PRECONDITIONC((CdlValueFlavor_Bool == flavor) || (CdlValueFlavor_BoolData == flavor));    CYG_PRECONDITIONC((0 <= source) && (source < CdlValue_number_of_sources));    enabled[source] = val;    source_valid[source] = true;    if (source > current_source) {        current_source = source;    }        CYG_REPORT_RETURN();}voidCdlValue::set_value(CdlSimpleValue& val, CdlValueSource source){    CYG_REPORT_FUNCNAME("CdlValue::set_value");    CYG_REPORT_FUNCARG3XV(this, &val, source);    CYG_INVARIANT_THISC(CdlValue);    CYG_PRECONDITIONC((CdlValueFlavor_BoolData == flavor) || (CdlValueFlavor_Data == flavor));    CYG_PRECONDITIONC((0 <= source) && (source < CdlValue_number_of_sources));        values[source] = val;    source_valid[source] = true;    if (source > current_source) {        current_source = source;    }        CYG_REPORT_RETURN();}voidCdlValue::set_enabled_and_value(bool enabled_arg, CdlSimpleValue& val, CdlValueSource source){    CYG_REPORT_FUNCNAME("CdlValue::set_enabled_and_value");    CYG_REPORT_FUNCARG4XV(this, enabled_arg, &val, source);    CYG_INVARIANT_THISC(CdlValue);    CYG_PRECONDITIONC(CdlValueFlavor_BoolData == flavor);    CYG_PRECONDITIONC((0 <= source) && (source < CdlValue_number_of_sources));    enabled[source]      = enabled_arg;    values[source]       = val;    source_valid[source] = true;    if (source > current_source) {        current_source = source;    }        CYG_REPORT_RETURN();}// ----------------------------------------------------------------------------// Given a SimpleValue, this member function does the right thing// for the flavor.voidCdlValue::set(CdlSimpleValue& val, CdlValueSource source){    CYG_REPORT_FUNCNAME("CdlValue::set");    CYG_REPORT_FUNCARG3XV(this, &val, source);    CYG_INVARIANT_THISC(CdlValue);    CYG_ASSERTC((CdlValueFlavor_Bool == flavor) || (CdlValueFlavor_BoolData == flavor) || (CdlValueFlavor_Data == flavor));    CYG_PRECONDITIONC((0 <= source) && (source < CdlValue_number_of_sources));    switch(flavor) {      case CdlValueFlavor_Bool:        enabled[source] = val.get_bool_value();        break;      case CdlValueFlavor_BoolData:        if (!val.get_bool_value()) {            enabled[source] = false;            values[source]  = (cdl_int) 0;        } else {            enabled[source] = true;            values[source]  = val;        }        break;                          case CdlValueFlavor_Data:        values[source] = val;        break;                          default:        CYG_FAIL("Unknown value flavor detected.");    }        source_valid[source] = true;    if (source > current_source) {        current_source = source;    }    CYG_REPORT_RETURN();}//}}}//}}}//{{{  CdlListValue class               // ----------------------------------------------------------------------------// List values. Most of this is straightforward.CdlListValue::CdlListValue(){    CYG_REPORT_FUNCNAME("CdlListValue:: default constructor");    CYG_REPORT_FUNCARG1XV(this);    // The only data fields are embedded objects which will have been    // filled in already.    cdllistvalue_cookie = CdlListValue_Magic;    CYGDBG_MEMLEAK_CONSTRUCTOR();        CYG_POSTCONDITION_THISC();    CYG_REPORT_RETURN();}CdlListValue::CdlListValue(const CdlListValue& original){    CYG_REPORT_FUNCNAME("CdlListValue:: copy constructor");    CYG_REPORT_FUNCARG2XV(this, &original);    CYG_INVARIANT_CLASSOC(CdlListValue, original);        // This may get expensive, but should not happen very often.    table               = original.table;    integer_ranges      = original.integer_ranges;    double_ranges       = original.double_ranges;

⌨️ 快捷键说明

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