class UmlRelation
!!!130016.cpp!!!	sKind() : string
  return "relation";
!!!130016.java!!!	sKind() : string
  return "relation";
!!!128011.cpp!!!	memo_ref() : void
  switch (relationKind()) {
  case aGeneralisation:
  case aRealization:
  case aDependency:
    return;
  default:
    if (visibility() == PublicVisibility)
      UmlAttribute::attrs.addElement(this);
    UmlItem::memo_ref();
    break;
  }
!!!128011.java!!!	memo_ref() : void
  switch (relationKind().value()) {
  case aRelationKind._aGeneralisation:
  case aRelationKind._aRealization:
  case aRelationKind._aDependency:
    return;
  default:
    if (visibility() == aVisibility.PublicVisibility)
      UmlAttribute.attrs.addElement(this);
    super.memo_ref();
  }
!!!130291.cpp!!!	html(in pfix : string, in rank : uint, in level : uint) : void
  bool extension;
  
  switch (relationKind()) {
  case aGeneralisation:
  case aRealization:
  case aDependency:
    return;
  case aDirectionalAssociation:
    extension = (parent()->stereotype() == "stereotype") &&
      (roleType()->stereotype() == "metaclass");
    break;
  default:
    extension = FALSE;
  }

  define();

  if (extension)
    fw.write("<table><tr><td><div class=\"element\">Extension</div></td></tr></table>");
  else {
    fw.write("<table><tr><td><div class=\"element\">Relation <b>");
    writeq(name());
    fw.write("</b></div></td></tr></table>");
  }

  QCString s = description();

  if (!s.isEmpty()) {
    fw.write("<p>");
    if (! javaDecl().isEmpty())
      gen_java_decl(s, TRUE);
    else if (! phpDecl().isEmpty())
      gen_php_decl(s, TRUE);
    else if (! pythonDecl().isEmpty())
      gen_python_decl(s);
    else
      gen_cpp_decl(s, TRUE);
    fw.write("<br /></p>");
  }

  if (extension) {
    fw.write("<p>Extend ");
    roleType()->write();
    fw.write("</p>");
  }
  else {
    fw.write("<p>Declaration :</p><ul>");
    
    fw.write("<li>Uml : ");
    gen_uml_decl();
    fw.write("</li>");
    
    s = cppDecl();
    
    if (!s.isEmpty()) {
      fw.write("<li>C++ : ");
      gen_cpp_decl(s, FALSE);
      fw.write("</li>");
    }
    
    s = javaDecl();
    
    if (!s.isEmpty()) {
      fw.write("<li>Java : ");
      gen_java_decl(s, FALSE);
      fw.write("</li>");
    }
    
    s = phpDecl();
    
    if (!s.isEmpty()) {
      fw.write("<li>Php : ");
      gen_php_decl(s, FALSE);
      fw.write("</li>");
    }
    
    s = pythonDecl();
    
    if (!s.isEmpty()) {
      fw.write("<li>Python : ");
      gen_python_decl(s);
      fw.write("</li>");
    }
    
    fw.write("</ul>");
  }

  annotation_constraint();
  write_properties();
 
  unload(FALSE, FALSE);
!!!130291.java!!!	html(in pfix : string, in rank : uint, in level : uint) : void
  boolean extension;
  
  switch (relationKind().value()) {
  case aRelationKind._aGeneralisation:
  case aRelationKind._aRealization:
  case aRelationKind._aDependency:
    return;
  case aRelationKind._aDirectionalAssociation:
    extension = (parent().stereotype() == "stereotype") &&
      (roleType().stereotype() == "metaclass");
    break;
  default:
    extension = false;
  }

  define();

  if (extension)
    fw.write("<table><tr><td><div class=\"element\">Extension</div></td></tr></table>");
  else {
    fw.write("<table><tr><td><div class=\"element\">Relation <b>");
    writeq(name());
    fw.write("</b></div></td></tr></table>");
  }
  
  String s = description();
  
  if (s.length() != 0) {
    fw.write("<p>");
    if (javaDecl().length() != 0)
      gen_java_decl(s, true);
    else if (phpDecl().length() != 0)
      gen_php_decl(s, true);
    else if (pythonDecl().length() != 0)
      gen_python_decl(s);
    else 
      gen_cpp_decl(s, true);
    fw.write("<br /></p>");
  }

  if (extension) {
    fw.write("<p>Extend ");
    roleType().write();
    fw.write("</p>");
  }
  else {
    fw.write("<p>Declaration :</p><ul>");
    
    fw.write("<li>Uml : ");
    gen_uml_decl();
    fw.write("</li>");
    
    s = cppDecl();
    
    if (s.length() != 0) {
      fw.write("<li>C++ : ");
      gen_cpp_decl(s, false);
      fw.write("</li>");
    }
    
    s = javaDecl();
    
    if (s.length() != 0) {
      fw.write("<li>Java : ");
      gen_java_decl(s, false);
      fw.write("</li>");
    }
    
    s = phpDecl();
    
    if (s.length() != 0) {
      fw.write("<li>Php : ");
      gen_php_decl(s, false);
      fw.write("</li>");
    }
    
    s = pythonDecl();
    
    if (s.length() != 0) {
      fw.write("<li>Python : ");
      gen_python_decl(s);
      fw.write("</li>");
    }
    
    fw.write("</ul>");
  }

  annotation_constraint();
  write_properties();

  unload(false, false);
!!!130419.cpp!!!	gen_cpp_decl(in s : string, in descr : bool) : void
  const char * p;

  if (! descr) {
    write((cppVisibility() == DefaultVisibility)
	  ? visibility() : cppVisibility(),
	  cppLanguage);
    fw.write(": ");
    p = bypass_comment(s);
  }
  else
    p = s;
  
  while (*p) {
    if (!strncmp(p, "${comment}", 10))
      p += 10;
    else if (!strncmp(p, "${description}", 14))
      p += 14;
    else if (!strncmp(p, "${static}", 9)) {
      p += 9;
      if (isClassMember())
	fw.write("static ");
    }
    else if (!strncmp(p, "${const}", 8)) {
      p += 8;
      if (isReadOnly())
	fw.write("const ");
    }
    else if (!strncmp(p, "${mutable}", 10)) {
      p += 10;
      if (isCppMutable())
	fw.write("mutable ");
    }
    else if (!strncmp(p, "${volatile}", 11)) {
      p += 11;
      if (isVolatile())
	fw.write("volatile ");
    }
    else if (!strncmp(p, "${type}", 7)) {
      p += 7;
      roleType()->write();
    }
    else if (!strncmp(p, "${name}", 7)) {
      p += 7;
      writeq(roleName());
    }
    else if (!strncmp(p, "${multiplicity}", 15)) {
      p += 15;
      
      QCString m = multiplicity();

      if (m.isEmpty() || (((const char *) m)[0] != '[')) {
	fw.write("[");
	writeq(m);
	fw.write("]");
      }
      else
	writeq(m);
    }
    else if (!strncmp(p, "${stereotype}", 13)) {
      p += 13;
      writeq(CppSettings::relationAttributeStereotype(stereotype()));
    }
    else if (!strncmp(p, "${value}", 8) || !strncmp(p, "${h_value}", 10)) {
      break;
    }
    else if (!strncmp(p, "${association}", 14)) {
      p += 14;
      write(association(), cppLanguage);
    }
    else if (*p == '\r')
      p += 1;
    else if (*p == '\n') {
      if (descr) {
	fw.write("<br />");
	p += 1;
      }
      else {
	fw.write(' ');
	
	do
	  p += 1;
	while ((*p != 0) && (*p <= ' '));
      }
    }
    else if (*p == ';') {
      if (descr)
	fw.write(*p++);
      else
	break;
    }
    else if (*p == '@')
      manage_alias(p);
    else
      writeq(*p++);
  }
!!!130419.java!!!	gen_cpp_decl(in s : string, in descr : bool) : void
  int n = s.length();
  int index;

  if (! descr) {
    write((cppVisibility() == aVisibility.DefaultVisibility)
	  ? visibility() : cppVisibility(),
	  aLanguage.cppLanguage);
    fw.write(": ");
    index = bypass_comment(s);
  }
  else
    index = 0;
  
  while (index != n) {
    if (s.startsWith("${comment}", index))
      index += 10;
    else if (s.startsWith("${description}", index))
      index += 14;
    else if (s.startsWith("${static}", index)) {
      index += 9;
      if (isClassMember())
	fw.write("static ");
    }
    else if (s.startsWith("${const}", index)) {
      index += 8;
      if (isReadOnly())
	fw.write("const ");
    }
    else if (s.startsWith("${mutable}", index)) {
      index += 10;
      if (isCppMutable())
	fw.write("mutable ");
    }
    else if (s.startsWith("${volatile}", index)) {
      index += 11;
      if (isVolatile())
	fw.write("volatile ");
    }
    else if (s.startsWith("${type}", index)) {
      index += 7;
      roleType().write();
    }
    else if (s.startsWith("${name}", index)) {
      index += 7;
      writeq(roleName());
    }
    else if (s.startsWith("${multiplicity}", index)) {
      index += 15;
      
      String m = multiplicity();

      if ((m.length() == 0) || (m.charAt(0) != '[')) {
	fw.write("[");
	writeq(m);
	fw.write("]");
      }
      else
	writeq(m);
    }
    else if (s.startsWith("${stereotype}", index)) {
      index += 13;
      writeq(CppSettings.relationAttributeStereotype(stereotype()));
    }
    else if (s.startsWith("${association}", index)) {
      index += 14;
      write(association(), aLanguage.cppLanguage);
    }
    else if (s.startsWith("${association}", index)) {
      index += 14;
      write(association(), aLanguage.cppLanguage);
    }
    else if (s.startsWith("${value}", index) ||
	     s.startsWith("${h_value}", index)) {
      break;
    }
    else if (s.charAt(index) == '\r')
      index += 1;
    else if (s.charAt(index) == '\n') {
      if (descr) {
	fw.write("<br />");
	index += 1;
      }
      else {
	fw.write(' ');
	
	do
	  index += 1;
	while ((index != n) && Character.isWhitespace(s.charAt(index)));
      }
    }
    else if (s.charAt(index) == ';') {
      if (descr)
	fw.write(s.charAt(index++));
      else
	break;
    }
    else if (s.charAt(index) == '@')
      index = manage_alias(s, index);
    else
      writeq(s.charAt(index++));
  }
!!!130547.cpp!!!	gen_java_decl(in s : string, in descr : bool) : void
  const char * p = bypass_comment(s);

  while (*p) {
    if (!strncmp(p, "${comment}", 10))
      p += 10;
    else if (!strncmp(p, "${description}", 14))
      p += 14;
    else if (!strncmp(p, "${visibility}", 13)) {
      p += 13;
      write(visibility(), javaLanguage);
      fw.write(' ');
    }
    else if (!strncmp(p, "${static}", 9)) {
      p += 9;
      if (isClassMember())
	fw.write("static ");
    }
    else if (!strncmp(p, "${transient}", 12)) {
      p += 12;
      if (isJavaTransient())
	fw.write("transient ");
    }
    else if (!strncmp(p, "${volatile}", 11)) {
      p += 11;
      if (isVolatile())
	fw.write("volatile ");
    }
    else if (!strncmp(p, "${final}", 8)) {
      p += 8;
      if (isReadOnly())
	fw.write("final ");
    }
    else if (!strncmp(p, "${type}", 7)) {
      p += 7;
      roleType()->write();
    }
    else if (!strncmp(p, "${name}", 7)) {
      p += 7;
      writeq(roleName());
    }
    else if (!strncmp(p, "${multiplicity}", 15)) {
      p += 15;
      
      QCString m = multiplicity();

      if (! m.isEmpty()) {
	const char * s = m;
	
	if (*s != '[')
	  fw.write("[]");
	else {
	  while (*s) {
	    switch (*s++) {
	    case '[':
	      fw.write('[');
	      break;
	    case ']':
	      fw.write(']');
	    default:
	      break;
	    }
	  }
	}
      }
    }
    else if (!strncmp(p, "${stereotype}", 13)) {
      p += 13;
      writeq(JavaSettings::relationAttributeStereotype(stereotype()));
    }
    else if (!strncmp(p, "${value}", 8)) {
      p += 8;
    }
    else if (!strncmp(p, "${association}", 14)) {
      p += 14;
      write(association(), javaLanguage);
    }
    else if (!strncmp(p, "${@}", 4))
      p += 4;
    else if (*p == '\r')
      p += 1;
    else if (*p == '\n') {
      if (descr) {
	fw.write("<br />");
	p += 1;
      }
      else {
	fw.write(' ');
	
	do
	  p += 1;
	while ((*p != 0) && (*p <= ' '));
      }
    }
    else if (*p == ';') {
      if (descr)
	fw.write(*p++);
      else
	break;
    }
    else if (*p == '@')
      manage_alias(p);
    else
      writeq(*p++);
  }
!!!130547.java!!!	gen_java_decl(in s : string, in descr : bool) : void
  int n = s.length();
  int index = bypass_comment(s);

  while (index != n) {
    if (s.startsWith("${comment}", index))
      index += 10;
    else if (s.startsWith("${description}", index))
      index += 14;
    else if (s.startsWith("${visibility}", index)) {
      index += 13;
      write(visibility(), aLanguage.javaLanguage);
      fw.write(' ');
    }
    else if (s.startsWith("${static}", index)) {
      index += 9;
      if (isClassMember())
	fw.write("static ");
    }
    else if (s.startsWith("${transient}", index)) {
      index += 12;
      if (isJavaTransient())
	fw.write("transient ");
    }
    else if (s.startsWith("${volatile}", index)) {
      index += 11;
      if (isVolatile())
	fw.write("volatile ");
    }
    else if (s.startsWith("${final}", index)) {
      index += 8;
      if (isReadOnly())
	fw.write("final ");
    }
    else if (s.startsWith("${type}", index)) {
      index += 7;
      roleType().write();
    }
    else if (s.startsWith("${name}", index)) {
      index += 7;
      writeq(roleName());
    }
    else if (s.startsWith("${multiplicity}", index)) {
      index += 15;
      
      String m = multiplicity();
      int mn = m.length();

      if (mn != 0) {
	if (m.charAt(0) != '[')
	  fw.write("[]");
	else {
	  for (int index2 = 0; index2 != mn; index2 += 1) {
	    switch (m.charAt(index2++)) {
	    case '[':
	      fw.write('[');
	      break;
	    case ']':
	      fw.write(']');
	    default:
	      break;
	    }
	  }
	}
      }
    }
    else if (s.startsWith("${stereotype}", index)) {
      index += 13;
      writeq(JavaSettings.relationAttributeStereotype(stereotype()));
    }
    else if (s.startsWith("${value}", index)) {
      index += 8;
    }
    else if (s.startsWith("${@}", index)) {
      index += 4;
    }
    else if (s.charAt(index) == '\r')
      index += 1;
    else if (s.charAt(index) == '\n') {
      if (descr) {
	fw.write("<br />");
	index += 1;
      }
      else {
	fw.write(' ');
	
	do
	  index += 1;
	while ((index != n) && Character.isWhitespace(s.charAt(index)));
      }
    }
    else if (s.charAt(index) == ';') {
      if (descr)
	fw.write(s.charAt(index++));
      else
	break;
    }
    else if (s.charAt(index) == '@')
      index = manage_alias(s, index);
    else
      writeq(s.charAt(index++));
  }
!!!211714.cpp!!!	gen_php_decl(in s : string, in descr : bool) : void
  const char * p = bypass_comment(s);

  while (*p) {
    if (!strncmp(p, "${comment}", 10))
      p += 10;
    else if (!strncmp(p, "${description}", 14))
      p += 14;
    else if (!strncmp(p, "${visibility}", 13)) {
      p += 13;
      write(visibility(), phpLanguage);
      fw.write(' ');
    }
    else if (!strncmp(p, "${static}", 9)) {
      p += 9;
      if (isClassMember())
	fw.write("static ");
    }
    else if (!strncmp(p, "${name}", 7)) {
      p += 7;
      if (!isReadOnly())
	fw.write("$");
      writeq(roleName());
    }
    else if (!strncmp(p, "${var}", 6)) {
      p += 6;
      if (!isReadOnly() &&
	  !isClassMember() &&
	  (visibility() == PackageVisibility))
	fw.write("var ");
    }
    else if (!strncmp(p, "${value}", 8)) {
      p += 8;
    }
    else if (!strncmp(p, "${const}", 8)) {
      p += 8;
      if (isReadOnly())
	fw.write("const ");
    }
    else if (*p == '\r')
      p += 1;
    else if (*p == '\n') {
      if (descr) {
	fw.write("<br />");
	p += 1;
      }
      else {
	fw.write(' ');
	
	do
	  p += 1;
	while ((*p != 0) && (*p <= ' '));
      }
    }
    else if (*p == ';') {
      if (descr)
	fw.write(*p++);
      else
	break;
    }
    else if (*p == '@')
      manage_alias(p);
    else
      writeq(*p++);
  }
!!!211714.java!!!	gen_php_decl(in s : string, in descr : bool) : void
  int n = s.length();
  int index = bypass_comment(s);

  while (index != n) {
    if (s.startsWith("${comment}", index))
      index += 10;
    else if (s.startsWith("${description}", index))
      index += 14;
    else if (s.startsWith("${visibility}", index)) {
      index += 13;
      write(visibility(), aLanguage.phpLanguage);
      fw.write(' ');
    }
    else if (s.startsWith("${static}", index)) {
      index += 9;
      if (isClassMember())
	fw.write("static ");
    }
    else if (s.startsWith("${name}", index)) {
      index += 7;
      if (!isReadOnly())
	fw.write("$");
      writeq(roleName());
    }
    else if (s.startsWith("${var}")) {
      index += 6;
      if (!isReadOnly() &&
	  !isClassMember() &&
	  (visibility() == aVisibility.PackageVisibility))
	fw.write("var ");
    }
    else if (s.startsWith("${value}", index)) {
      index += 8;
    }
    else if (s.startsWith("${const}")) {
      index += 8;
      if (isReadOnly())
	fw.write("const ");
    }
    else if (s.charAt(index) == '\r')
      index += 1;
    else if (s.charAt(index) == '\n') {
      if (descr) {
	fw.write("<br />");
	index += 1;
      }
      else {
	fw.write(' ');
	
	do
	  index += 1;
	while ((index != n) && Character.isWhitespace(s.charAt(index)));
      }
    }
    else if (s.charAt(index) == ';') {
      if (descr)
	fw.write(s.charAt(index++));
      else
	break;
    }
    else if (s.charAt(index) == '@')
      index = manage_alias(s, index);
    else
      writeq(s.charAt(index++));
  }
!!!129539.cpp!!!	gen_python_decl(in s : string) : void
  QCString st = PythonSettings::classStereotype(stereotype());
  const char * p = bypass_comment(s);

  while (*p) {
    if (!strncmp(p, "${comment}", 10))
      p += 10;
    else if (!strncmp(p, "${description}", 14))
      p += 14;
    else if (!strncmp(p, "${name}", 7)) {
      p += 7;
      writeq(roleName());
    }
    else if (!strncmp(p, "${value}", 8)) {
      p += 8;
      writeq((defaultValue().isEmpty()) ? "None" : defaultValue());
    }
    else if (!strncmp(p, "${self}", 7)) {
      p += 7;
      if (!isClassMember())
	fw.write("self.");
    }
    else if (!strncmp(p, "${type}", 7)) {
      p += 7;
      roleType()->write();
    }
    else if (!strncmp(p, "${stereotype}", 13)) {
      p += 13;
      writeq(st);
    }
    else if (*p == '\r')
      p += 1;
    else if (*p == '@')
      manage_alias(p);
    else
      writeq(*p++);
  }
!!!129539.java!!!	gen_python_decl(in s : string) : void
  String st = PythonSettings.classStereotype(stereotype());
  int n = s.length();
  int index = bypass_comment(s);

  while (index != n) {
    if (s.startsWith("${comment}", index))
      index += 10;
    else if (s.startsWith("${description}", index))
      index += 14;
    else if (s.startsWith("${name}", index)) {
      index += 7;
      writeq(roleName());
    }
    else if (s.startsWith("${value}", index)) {
      index += 8;
      writeq((defaultValue() == "") ? "None" : defaultValue());
    }
    else if (s.startsWith("${self}", index)) {
      index += 7;
      if (!isClassMember())
	fw.write("self.");
    }
    else if (s.startsWith("${type}", index)) {
      index += 7;
      roleType().write();
    }
    else if (s.startsWith("${stereotype}")) {
      index += 13;
      writeq(st);
    }
    else if (s.charAt(index) == '\r')
      index += 1;
    else if (s.charAt(index) == '@')
      index = manage_alias(s, index);
    else
      writeq(s.charAt(index++));
  }
!!!204034.cpp!!!	gen_uml_decl() : void
  if (isClassMember())
    fw.write("static, ");
  write(visibility());
  writeq(roleName());
  fw.write(" : ");
  roleType()->write();

  QCString s;
  
  s = defaultValue();
  if (!s.isEmpty()) {
    if (s[0] != '=')
      fw.write(" = ");
    writeq(s);
  }

  s = multiplicity();
  if (!s.isEmpty()) {
    fw.write(", multiplicity : ");
    writeq(s);
  }

  if (isDerived())
    fw.write((isDerivedUnion()) ? ", derived union" : ", derived");
    
  if (isReadOnly())
    fw.write(", read only");
    
  if (isOrdered())
    fw.write(", ordered");
    
  if (isUnique())
    fw.write(", unique");

!!!204034.java!!!	gen_uml_decl() : void
  if (isClassMember())
    fw.write("static, ");
  write(visibility());
  writeq(roleName());
  fw.write(" : ");
  roleType().write();

  String s;
  
  s = defaultValue();
  if (s.length() != 0) {
    if (s.charAt(0) != '=')
      fw.write(" = ");
    writeq(s);
  }
  
  s = multiplicity();
  if (s.length() != 0) {
    fw.write(", multiplicity : ");
    writeq(s);
  }

  if (isDerived())
    fw.write((isDerivedUnion()) ? ", derived union" : ", derived");
    
  if (isReadOnly())
    fw.write(", read only");
    
  if (isOrdered())
    fw.write(", ordered");
    
  if (isUnique())
    fw.write(", unique");

!!!128267.cpp!!!	pretty_name() : string
  return roleName();
!!!128267.java!!!	pretty_name() : string
  return roleName();
