001    package org.bridj.objc;
002    import org.bridj.*;
003    import static org.bridj.Pointer.*;
004    import static org.bridj.objc.ObjectiveCRuntime.*;
005    
006    public class SEL extends TypedPointer {
007                    public SEL(long peer) { super(peer); }
008                    public SEL(Pointer<?> ptr) { super(ptr); }
009                    
010                    public static SEL valueOf(String name) {
011                            return sel_registerName(pointerToCString(name));
012                    }
013                    
014                    protected volatile String name;
015                    public String getName() {
016                            if (name == null)
017                                    name = sel_getName(this).getCString();
018                            return name;
019                    }
020                    public String toString() {
021                            return "@selector(" + getName() + ")";
022                    }
023                    public boolean equals(Object o) {
024                            if (!(o instanceof SEL))
025                                    return false;
026                            return getName().equals(((SEL)o).getName());
027                    }
028                    public int hashCode() {
029                            return getName().hashCode();
030                    }
031    }
032