📄 value.cxx
字号:
}// ----------------------------------------------------------------------------// 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 + -