001/* 002 * BridJ - Dynamic and blazing-fast native interop for Java. 003 * http://bridj.googlecode.com/ 004 * 005 * Copyright (c) 2010-2013, Olivier Chafik (http://ochafik.com/) 006 * All rights reserved. 007 * 008 * Redistribution and use in source and binary forms, with or without 009 * modification, are permitted provided that the following conditions are met: 010 * 011 * * Redistributions of source code must retain the above copyright 012 * notice, this list of conditions and the following disclaimer. 013 * * Redistributions in binary form must reproduce the above copyright 014 * notice, this list of conditions and the following disclaimer in the 015 * documentation and/or other materials provided with the distribution. 016 * * Neither the name of Olivier Chafik nor the 017 * names of its contributors may be used to endorse or promote products 018 * derived from this software without specific prior written permission. 019 * 020 * THIS SOFTWARE IS PROVIDED BY OLIVIER CHAFIK AND CONTRIBUTORS ``AS IS'' AND ANY 021 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 022 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 023 * DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY 024 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 025 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 026 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 027 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 028 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 029 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 030 */ 031package org.bridj.ann; 032 033import java.lang.annotation.ElementType; 034import java.lang.annotation.Retention; 035import java.lang.annotation.RetentionPolicy; 036import java.lang.annotation.Target; 037 038/** 039 * Indicate the index of a structure field (in Java, the order of methods and 040 * fields is unspecified so you need to order them explicitely).<br> 041 * For C++ structs, the index is absolute : it must take into account the fields 042 * in parent classes (unlike {@link Virtual}, which virtual table offset is 043 * relative to the declared class). 044 * 045 * @author ochafik 046 */ 047@Retention(RetentionPolicy.RUNTIME) 048@Target({ElementType.FIELD, ElementType.METHOD}) 049public @interface Field { 050 051 /** 052 * Index of the field in a struct (first field has index 0).<br> 053 * Fields of parent structures must be taken into account (if parent struct 054 * has 2 fields, first field of sub-struct has index 2).<br> 055 * If more than one field are given the same index, this will produce an 056 * union at that index. 057 */ 058 int value(); 059 060 /** 061 * Absolute index of the field from the start of the struct 062 */ 063 //int offset() default Integer.MIN_VALUE; 064 /** 065 * Declare that this field shares its space with another (the two or more 066 * fields are in an union).<br> 067 * The unionWith index must be the index of the first field of the union. 068 */ 069 int unionWith() default -1; 070}