📄 value.cxx
字号:
// ----------------------------------------------------------------------------// Get hold of the current flavor.CdlValueFlavorCdlValue::get_flavor(void) const{ CYG_REPORT_FUNCNAMETYPE("CdlValue::get_flavor", "result %d"); CYG_REPORT_FUNCARG1XV(this); CYG_PRECONDITION_THISC(); CdlValueFlavor result = flavor; CYG_REPORT_RETVAL(result); return result;}// ----------------------------------------------------------------------------// 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. All data parts are set to "1", // although that should not really matter. enabled[CdlValueSource_Default] = true; enabled[CdlValueSource_Inferred] = true; enabled[CdlValueSource_Wizard] = true; enabled[CdlValueSource_User] = true; CdlSimpleValue simple_val((cdl_int) 1); values[CdlValueSource_Default] = simple_val; values[CdlValueSource_Inferred] = simple_val; values[CdlValueSource_Wizard] = simple_val; values[CdlValueSource_User] = simple_val; break; } case CdlValueFlavor_Bool : { // All value sources start out as disabled, but with a // constant data part of 1. Users can only control the // boolean part. This is consistent with header file // generation: no #define is generated for disabled // options, but if the option is enabled then the data // part will be used for the value. enabled[CdlValueSource_Default] = false; enabled[CdlValueSource_Inferred] = false; enabled[CdlValueSource_Wizard] = false; enabled[CdlValueSource_User] = false; // BLV - keep the data part at 0 for now. There is too // much confusion in the code between value as a string // representation, and value as the data part of the // bool/data pair. This needs to be fixed, but it requires // significant API changes.#if 0 CdlSimpleValue simple_val(cdl_int(1));#else CdlSimpleValue simple_val(cdl_int(0));#endif values[CdlValueSource_Default] = simple_val; values[CdlValueSource_Inferred] = simple_val; values[CdlValueSource_Wizard] = simple_val; values[CdlValueSource_User] = simple_val; break; } case CdlValueFlavor_BoolData : { // All value sources start out as disabled, just like // booleans. Nothing is known about the data part. 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, and cannot be // changed. Nothing is known about the data part. 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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -