// ShowAround void ServerInfo::ShowAround(RequestMemberVisitor* visitor) { VisitString(this, visitor, fServerName); VisitString(this, visitor, fConnectionMethod); int32 count = fShareInfos.Count(); visitor->Visit(this, count); for (int32 i = 0; i < count; i++) visitor->Visit(this, fShareInfos.ElementAt(i)); }
bool FastXMLVisitor::VisitEnter (const XMLElement & element, const XMLAttribute* /* attr */) { const char* element_name = element.Name(); if (strcmp(element_name, "templates") == 0 ) { instruction_context context; context.ns_ = get_optional_attr(element, "templateNs", ""); context.dictionary_ = get_optional_attr(element, "dictionary", ""); context_stack_.push_back(context); return VisitEnterTemplates(element); } std::string name_attr = get_optional_attr(element, "name", ""); if (strcmp(element_name, "templateRef") == 0) { return VisitTemplateRef(element, name_attr, num_fields_.back()); } bool result = true; if (strcmp(element_name, "template") == 0 ) { save_context(element); result = VisitEnterTemplate(element, name_attr, num_fields_.back()); } else if (strcmp(element_name, "group") == 0 ) { save_context(element); result = VisitEnterGroup(element, name_attr, num_fields_.back()); } else if (strcmp(element_name, "sequence") == 0 ) { save_context(element); result = VisitEnterSequence(element, name_attr, num_fields_.back()); } else if (strcmp(element_name, "define") == 0) { return VisitEnterDefine(element, name_attr); } else { int bits; bool is_vector; if ((strncmp(element_name, "int", 3) == 0 && parse_bits(element_name+3, bits, is_vector) ) || (strncmp(element_name, "uInt", 4) == 0 && parse_bits(element_name+4, bits, is_vector) ) ) { // int8, int16 and uint8, uint16 are not standards, convert them to int32 and uint32 respectively if (is_vector) return VisitIntVector(element,bits, name_attr, num_fields_.back()); return VisitInteger(element,bits, name_attr, num_fields_.back()); } else if (strcmp(element_name, "decimal") == 0 ) { return VisitDecimal(element, name_attr, num_fields_.back()); } else if (strcmp(element_name, "string") == 0 ) { return VisitString(element, name_attr, num_fields_.back()); } else if (strcmp(element_name, "byteVector") == 0 ) { return VisitByteVector(element, name_attr, num_fields_.back()); } return true; } num_fields_.push_back(0); return result; }
// ShowAround void ShareInfo::ShowAround(RequestMemberVisitor* visitor) { VisitString(this, visitor, fShareName); }
void Visitor::Visit(Element const& element) { bool isElement = false; switch(element.Type()) { // Constant Tokens case Types::NIL: VisitNil(); break; case Types::TRUE_: VisitTrue(); break; case Types::FALSE_: VisitFalse(); break; case Types::STRING: { String S = CastToString(element, isElement); VisitString(S); } break; case Types::SUPERSTRING: { SuperString S = CastToSuperString(element, isElement); VisitSuperString(S); } break; case Types::NUMBER: { Number N = CastToNumber(element, isElement); VisitNumber(N); } break; case Types::CONTAINER: { Container C = CastToContainer(element, isElement); VisitContainer(C); } break; case Types::BUILTIN: { Builtin B = CastToBuiltin(element, isElement); VisitBuiltin(B); } break; case Types::CALL: { Funcall F = CastToFuncall(element, isElement); VisitCall(F); } break; case Types::FUNCTION: { Function F = CastToFunction(element, isElement); VisitFunction(F); } break; case Types::IF: { If F = CastToIf(element, isElement); VisitIf(F); } break; case Types::SET: { Set F = CastToSet(element, isElement); VisitSet(F); } break; case Types::IMPERATIVE: { Imperative F = CastToImperative(element, isElement); VisitImperative(F); } case Types::CASE: { Case C = CastToCase(element, isElement); VisitCase(C); } break; }; }