1 /* 2 * Copyright (c) 2004-2007 The Trustees of Indiana University and Indiana 3 * University Research and Technology 4 * Corporation. All rights reserved. 5 * Copyright (c) 2004-2005 The University of Tennessee and The University 6 * of Tennessee Research Foundation. All rights 7 * reserved. 8 * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, 9 * University of Stuttgart. All rights reserved. 10 * Copyright (c) 2004-2005 The Regents of the University of California. 11 * All rights reserved. 12 * Copyright (c) 2015 Los Alamos National Security, LLC. All rights 13 * reserved. 14 * $COPYRIGHT$ 15 * 16 * Additional copyrights may follow 17 * 18 * $HEADER$ 19 */ 20 21 package mpi; 22 23 /** 24 * Struct class for {@link MPI#SHORT_INT} datatype. 25 */ 26 public final class ShortInt extends Struct 27 { 28 private final int sSize, iOff, iSize; 29 30 /** 31 * The struct object will be created only in MPI class. 32 * @param shortSize short size 33 * @param intOff int offset 34 * @param intSize int size 35 * @see MPI#shortInt 36 */ ShortInt(int shortSize, int intOff, int intSize)37 protected ShortInt(int shortSize, int intOff, int intSize) 38 { 39 sSize = shortSize; 40 iSize = intSize; 41 int sOff; 42 43 switch(sSize) 44 { 45 case 2: sOff = addShort(); break; 46 case 4: sOff = addInt(); break; 47 case 8: sOff = addLong(); break; 48 default: throw new AssertionError("Unsupported short size: "+ sSize); 49 } 50 51 assert sOff == 0; 52 setOffset(intOff); 53 54 switch(iSize) 55 { 56 case 4: iOff = addInt(); break; 57 case 8: iOff = addLong(); break; 58 default: throw new AssertionError("Unsupported int size: "+ iSize); 59 } 60 61 assert(intOff == iOff); 62 } 63 64 /** 65 * Creates a Data object. 66 * @return new Data object. 67 */ newData()68 @Override protected Data newData() 69 { 70 return new Data(); 71 } 72 73 /** 74 * Class for reading/writing data in a struct stored in a byte buffer. 75 */ 76 public final class Data extends Struct.Data 77 { 78 /** 79 * Gets the short value. 80 * @return short value 81 */ getValue()82 public short getValue() 83 { 84 switch(sSize) 85 { 86 case 2: return getShort(0); 87 case 4: return (short)getInt(0); 88 case 8: return (short)getLong(0); 89 default: throw new AssertionError(); 90 } 91 } 92 93 /** 94 * Gets the int value. 95 * @return int value 96 */ getIndex()97 public int getIndex() 98 { 99 switch(iSize) 100 { 101 case 4: return getInt(iOff); 102 case 8: return (int)getLong(iOff); 103 default: throw new AssertionError(); 104 } 105 } 106 107 /** 108 * Puts the short value. 109 * @param v short value 110 */ putValue(short v)111 public void putValue(short v) 112 { 113 switch(sSize) 114 { 115 case 2: putShort(0, v); break; 116 case 4: putInt(0, v); break; 117 case 8: putLong(0, v); break; 118 default: throw new AssertionError(); 119 } 120 } 121 122 /** 123 * Puts the int value. 124 * @param v int value 125 */ putIndex(int v)126 public void putIndex(int v) 127 { 128 switch(iSize) 129 { 130 case 4: putInt(iOff, v); break; 131 case 8: putLong(iOff, v); break; 132 default: throw new AssertionError(); 133 } 134 } 135 } // Data 136 137 } // ShortInt 138