Add hb_array<>()

Simplifies transient object creation.

Fixes https://github.com/harfbuzz/harfbuzz/issues/1301
diff --git a/src/hb-aat-layout-trak-table.hh b/src/hb-aat-layout-trak-table.hh
index c2c50bb..823991f 100644
--- a/src/hb-aat-layout-trak-table.hh
+++ b/src/hb-aat-layout-trak-table.hh
@@ -55,7 +55,7 @@
 			unsigned int index,
 			unsigned int nSizes) const
   {
-    return hb_array_t<const FWORD> ((base+valuesZ).arrayZ, nSizes)[index];
+    return hb_array ((base+valuesZ).arrayZ, nSizes)[index];
   }
 
   public:
diff --git a/src/hb-dsalgs.hh b/src/hb-dsalgs.hh
index 27c1a96..11a0550 100644
--- a/src/hb-dsalgs.hh
+++ b/src/hb-dsalgs.hh
@@ -537,6 +537,8 @@
   T *arrayZ;
   unsigned int len;
 };
+template <typename T>
+hb_array_t<T> hb_array (T *array, unsigned int len) { return hb_array_t<T> (array, len); }
 
 struct hb_bytes_t
 {
diff --git a/src/hb-open-file.hh b/src/hb-open-file.hh
index a973455..3b742ea 100644
--- a/src/hb-open-file.hh
+++ b/src/hb-open-file.hh
@@ -330,8 +330,7 @@
   inline const ResourceRecord& get_resource_record (unsigned int i,
 						    const void *type_base) const
   {
-    return hb_array_t<const ResourceRecord> ((type_base+resourcesZ).arrayZ,
-					     get_resource_count ()) [i];
+    return hb_array ((type_base+resourcesZ).arrayZ, get_resource_count ())[i];
   }
 
   inline bool sanitize (hb_sanitize_context_t *c,
diff --git a/src/hb-ot-color-cpal-table.hh b/src/hb-ot-color-cpal-table.hh
index 7dd0c0f..4b09d3a 100644
--- a/src/hb-ot-color-cpal-table.hh
+++ b/src/hb-ot-color-cpal-table.hh
@@ -55,7 +55,7 @@
   {
     if (!paletteFlagsZ) return HB_OT_COLOR_PALETTE_FLAG_DEFAULT;
     return (hb_ot_color_palette_flags_t) (uint32_t)
-	   hb_array_t<const HBUINT32> ((base+paletteFlagsZ).arrayZ, palette_count)[palette_index];
+	   hb_array ((base+paletteFlagsZ).arrayZ, palette_count)[palette_index];
   }
 
   inline unsigned int
@@ -64,7 +64,7 @@
 		       unsigned int palette_count) const
   {
     if (!paletteLabelsZ) return HB_NAME_ID_INVALID;
-    return hb_array_t<const NameID> ((base+paletteLabelsZ).arrayZ, palette_count)[palette_index];
+    return hb_array ((base+paletteLabelsZ).arrayZ, palette_count)[palette_index];
   }
 
   inline unsigned int
@@ -73,7 +73,7 @@
 		     unsigned int color_count) const
   {
     if (!colorLabelsZ) return HB_NAME_ID_INVALID;
-    return hb_array_t<const NameID> ((base+colorLabelsZ).arrayZ, color_count)[color_index];
+    return hb_array ((base+colorLabelsZ).arrayZ, color_count)[color_index];
   }
 
   public: