text: #pragma once
  #ifndef MMARRAY_H
  #define MMARRAY_H
  
  #include "types.h"
  
  struct _MMPointArray {
  	MMPoint *array; /* Pointer to actual data. */
  	size_t count;   /* Number of elements in array. */
  	size_t _allocedCount; /* Private; do not use outside of MMPointArray.c. */
  };
  
  typedef struct _MMPointArray MMPointArray;
  typedef MMPointArray *MMPointArrayRef;
  
  /* Creates array of an initial size (the maximum size is still limitless).
   * This follows the "Create" Rule; i.e., responsibility for "destroying" the
   * array is given to the caller. */
  MMPointArrayRef createMMPointArray(size_t initialCount);
  
  /* Frees memory occupied by |pointArray|. Does not accept NULL. */
  void destroyMMPointArray(MMPointArrayRef pointArray);
  
  /* Appends a point to an array, increasing the internal size if necessary. */
  void MMPointArrayAppendPoint(MMPointArrayRef pointArray, MMPoint point);
  
  /* Retrieve point from array. */
  #define MMPointArrayGetItem(a, i) ((a)->array)[i]
  
  /* Set point in array. */
  #define MMPointArraySetItem(a, i, item) ((a)->array[i] = item)
  
  #endif /* MMARRAY_H */
  