package org.bytedeco.javacpp.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.bytedeco.javacpp.tools.Generator;
/**
* Names the identifier of a native C++ struct, class, union, function, variable,
* operator, macro, etc. Without this annotation, {@link Generator} guesses the
* native name based on the name of the Java peer. However, it may sometimes be
* impossible to use the same name in Java, for example, in the case of overloaded
* operators or to specify template arguments, while other times we may need to
* access by name, for example, a callback pointer or function object, from C++.
* For all those cases, we require this annotation.
*
* @see Generator
*
* @author Samuel Audet
*/
@Documented @Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface Name {
/** The second element gets used as a suffix to work around arrays of anonymous struct or union. */
String[] value();
}