View Javadoc
1   // ******************************************************************************
2   //
3   // Title:       Force Field X.
4   // Description: Force Field X - Software for Molecular Biophysics.
5   // Copyright:   Copyright (c) Michael J. Schnieders 2001-2024.
6   //
7   // This file is part of Force Field X.
8   //
9   // Force Field X is free software; you can redistribute it and/or modify it
10  // under the terms of the GNU General Public License version 3 as published by
11  // the Free Software Foundation.
12  //
13  // Force Field X is distributed in the hope that it will be useful, but WITHOUT
14  // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
15  // FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
16  // details.
17  //
18  // You should have received a copy of the GNU General Public License along with
19  // Force Field X; if not, write to the Free Software Foundation, Inc., 59 Temple
20  // Place, Suite 330, Boston, MA 02111-1307 USA
21  //
22  // Linking this library statically or dynamically with other modules is making a
23  // combined work based on this library. Thus, the terms and conditions of the
24  // GNU General Public License cover the whole combination.
25  //
26  // As a special exception, the copyright holders of this library give you
27  // permission to link this library with independent modules to produce an
28  // executable, regardless of the license terms of these independent modules, and
29  // to copy and distribute the resulting executable under terms of your choice,
30  // provided that you also meet, for each linked independent module, the terms
31  // and conditions of the license of that module. An independent module is a
32  // module which is not derived from or based on this library. If you modify this
33  // library, you may extend this exception to your version of the library, but
34  // you are not obligated to do so. If you do not wish to do so, delete this
35  // exception statement from your version.
36  //
37  // ******************************************************************************
38  package ffx.openmm;
39  
40  import com.sun.jna.Memory;
41  import com.sun.jna.Pointer;
42  import com.sun.jna.ptr.PointerByReference;
43  
44  import static edu.uiowa.jopenmm.OpenMMLibrary.OpenMM_StringArray_append;
45  import static edu.uiowa.jopenmm.OpenMMLibrary.OpenMM_StringArray_create;
46  import static edu.uiowa.jopenmm.OpenMMLibrary.OpenMM_StringArray_destroy;
47  import static edu.uiowa.jopenmm.OpenMMLibrary.OpenMM_StringArray_get;
48  import static edu.uiowa.jopenmm.OpenMMLibrary.OpenMM_StringArray_getSize;
49  import static edu.uiowa.jopenmm.OpenMMLibrary.OpenMM_StringArray_resize;
50  import static edu.uiowa.jopenmm.OpenMMLibrary.OpenMM_StringArray_set;
51  
52  /**
53   * String Array.
54   */
55  public class StringArray {
56  
57    /**
58     * String Array Platform pointer.
59     */
60    private PointerByReference pointer;
61  
62    /**
63     * OpenMM String Array constructor.
64     *
65     * @param size The size of the String Array.
66     */
67    public StringArray(int size) {
68      pointer = OpenMM_StringArray_create(size);
69    }
70  
71    /**
72     * OpenMM String Array constructor.
73     *
74     * @param pointer The String Array pointer.
75     */
76    public StringArray(PointerByReference pointer) {
77      this.pointer = pointer;
78    }
79  
80    /**
81     * Get the number of strings in the String Array.
82     *
83     * @return The number of strings in the String Array.
84     */
85    public int getSize() {
86      return OpenMM_StringArray_getSize(pointer);
87    }
88  
89    /**
90     * Return the String at index i.
91     *
92     * @param i The index of the String to return.
93     * @return String The requested String.
94     */
95    public String get(int i) {
96      int size = getSize();
97      if (i < 0 || i >= size) {
98        return null;
99      }
100     Pointer string = OpenMM_StringArray_get(pointer, i);
101     if (string == null) {
102       return null;
103     }
104     return string.getString(0);
105   }
106 
107   /**
108    * Resize the String Array.
109    *
110    * @param size The new size of the String Array.
111    */
112   public void resize(int size) {
113     OpenMM_StringArray_resize(pointer, size);
114   }
115 
116   /**
117    * Append a String to the String Array.
118    *
119    * @param string The String to append.
120    */
121   public void append(String string) {
122     Pointer ref = new Memory(string.length() + 1);
123     ref.setString(0, string);
124     OpenMM_StringArray_append(pointer, ref);
125   }
126 
127   /**
128    * Set the String at index i.
129    *
130    * @param i      The index of the String to set.
131    * @param string The String to set.
132    */
133   public void set(int i, String string) {
134     Pointer ref = new Memory(string.length() + 1);
135     ref.setString(0, string);
136     OpenMM_StringArray_set(pointer, i, ref);
137   }
138 
139   /**
140    * Destroy the String Array.
141    */
142   public void destroy() {
143     if (pointer != null) {
144       OpenMM_StringArray_destroy(pointer);
145       pointer = null;
146     }
147   }
148 
149 }