Parameter::Parameter(Node *node, const ParameterName& name, const ParameterType& type, Channel channels, ParameterDirection direction) : m_node(node), m_name(name), m_verboseName(""), m_type(type), m_direction(direction), m_connection(0), m_channelCount(channels), m_channels(new Value[channels]) { if (validName(name)) { m_name = name; } else { throw InvalidName(); } if (channels <= 0) { throw InvalidName(); } for (Channel i=0; i<m_channelCount;++i) { if (m_type == kInt) { m_channels[i].i = 0; } else if (m_type == kFloat) { m_channels[i].f = 0; } else if (m_type == kString) { m_channels[i].s = new std::string; } else { m_channels[i].d = 0; } } }
/** Returns the index that corresponds to the given name * * @throws InvalidName if the given name does not exist on this array */ size_t mapNameToIndex(std::string const& name) const { std::vector<std::string>::const_iterator it = find(names.begin(), names.end(), name); if (it == names.end()) throw InvalidName(name); return it - names.begin(); }
/*! * @if jp * @brief 与えられた文字列表現を NameComponent に分解する * @else * @brief Resolve given string representation to NameComponent * @endif */ CosNaming::Name CorbaNaming::toName(const char* sname) throw (SystemException, InvalidName) { if (!sname) throw InvalidName(); if (*sname == '\0') throw InvalidName(); std::string string_name(sname); std::vector<std::string> name_comps; // String name should include 1 or more names CORBA::ULong nc_length = 0; nc_length = split(string_name, std::string("/"), name_comps); if (!(nc_length > 0)) throw InvalidName(); // Name components are allocated CosNaming::Name_var name = new CosNaming::Name(); name->length(nc_length); // Insert id and kind to name components for (CORBA::ULong i = 0; i < nc_length; ++i) { std::string::size_type pos; pos = name_comps[i].find_last_of("."); if (pos != name_comps[i].npos) { name[i].id = CORBA::string_dup(name_comps[i].substr(0, pos).c_str()); name[i].kind = CORBA::string_dup(name_comps[i].substr(pos + 1).c_str()); } else { name[i].id = CORBA::string_dup(name_comps[i].c_str()); #ifndef ORB_IS_RTORB name[i].kind = ""; #else // ORB_IS_RTORB name[i].kind = (char*)""; #endif // ORB_IS_RTORB } } return name; }
/*! * @if jp * @brief 与えられた NameComponent の文字列表現を返す * @else * @brief Get string representation of given NameComponent * @endif */ char* CorbaNaming::toString(const CosNaming::Name& name) throw (SystemException, InvalidName) { if (name.length() == 0) throw InvalidName(); CORBA::ULong slen = 0; slen = getNameLength(name); CORBA::String_var string_name = CORBA::string_alloc(slen); nameToString(name, (char*)string_name, slen); return string_name._retn(); }