Class OSCPacketCodec.Atom

  • Enclosing class:
    OSCPacketCodec

    public abstract static class OSCPacketCodec.Atom
    extends Object
    The Atom class represents a combination of an encoder and decoder of a Java respectively OSC atom. While typically an Atom does a one-to-one mapping between a single Java class and a single OSC type tag, other mappings are possible, such as different type tags for the same Java class, or decoding the same typetag into different Java classes.

    An example of the first case would be a colour atom: The decodeAtom method would require a 'r' typetag and return a java.awt.Color object, with a body similar to this:

                    return new java.awt.Color( b.getInt(), true );
            
    The encodeAtom and getTypeTag methods would require its argument to be a java.awt.Color, getTypeTag would return 'r', getAtomSize would return 4, and encodeAtom would do something like
                    tb.put( (byte) 'r' );
                    db.putInt( ((java.awt.Color) o).getRGB() );
            

    And example of the latter case (one-to-many mapping) would be a codec for the 'T' ("true") and 'F' ("false") typetags. This codec would be registered once as an encoder, using putEncoder( Boolean.class, myAtomCodec ), and twice as a decoder, using putDecoder( (byte) 'F', myAtomCodec ) and putDecoder( (byte) 'T', myAtomCodec ). The codec's getAtomSize method would return 0, getTypeTag would return

                    ((Boolean) o).booleanValue() ? (byte) 'T' : (byte) 'F'
            
    decodeAtom would return
                    Boolean.valueOf( typeTag == (byte) 'T' )
            
    and finally encodeAtom would be:
                    tb.put( this.getTypeTag( o ));
            
    See Also:
    OSCPacketCodec.putDecoder( byte, de.sciss.net.OSCPacketCodec.Atom ), OSCPacketCodec.putEncoder( java.lang.Class, de.sciss.net.OSCPacketCodec.Atom )