Adjust internal header dependencies
diff --git a/src/hb-array.hh b/src/hb-array.hh
index 3cce512..a07560f 100644
--- a/src/hb-array.hh
+++ b/src/hb-array.hh
@@ -28,13 +28,16 @@
#define HB_ARRAY_HH
#include "hb.hh"
+#include "hb-dsalgs.hh"
+#include "hb-iter.hh"
+#include "hb-null.hh"
template <typename Type>
struct hb_sorted_array_t;
template <typename Type>
-struct hb_array_t
+struct hb_array_t// : hb_iter_t<hb_array_t<Type>, Type>
{
typedef Type item_t;
enum { item_size = hb_static_size (Type) };
diff --git a/src/hb-dsalgs.hh b/src/hb-dsalgs.hh
index 48ce989..aa1c521 100644
--- a/src/hb-dsalgs.hh
+++ b/src/hb-dsalgs.hh
@@ -28,7 +28,6 @@
#define HB_DSALGS_HH
#include "hb.hh"
-
#include "hb-null.hh"
diff --git a/src/hb-iter.hh b/src/hb-iter.hh
index 8767936..ffb6c49 100644
--- a/src/hb-iter.hh
+++ b/src/hb-iter.hh
@@ -28,6 +28,7 @@
#define HB_ITER_HH
#include "hb.hh"
+#include "hb-null.hh"
/* Unified iterator object.
diff --git a/src/hb-vector.hh b/src/hb-vector.hh
index 4e962d2..a9fa123 100644
--- a/src/hb-vector.hh
+++ b/src/hb-vector.hh
@@ -29,6 +29,7 @@
#include "hb.hh"
#include "hb-array.hh"
+#include "hb-null.hh"
template <typename Type, unsigned int PreallocedCount=8>
diff --git a/src/hb.hh b/src/hb.hh
index dbfcc20..18f4e5c 100644
--- a/src/hb.hh
+++ b/src/hb.hh
@@ -545,14 +545,17 @@
#define hb_remove_pointer(T) hb_remove_pointer<T>::value
-/* Headers we include for everyone. Keep sorted. They express dependency amongst
- * themselves, but no other file should include them.*/
+/* Headers we include for everyone. Keep topologically sorted by dependency.
+ * They express dependency amongst themselves, but no other file should include
+ * them directly.*/
#include "hb-atomic.hh"
-#include "hb-debug.hh"
-#include "hb-dsalgs.hh"
-#include "hb-iter.hh"
#include "hb-mutex.hh"
#include "hb-null.hh"
-#include "hb-object.hh"
+#include "hb-dsalgs.hh" // Requires: hb-null
+#include "hb-iter.hh" // Requires: hb-null
+#include "hb-debug.hh" // Requires: hb-atomic hb-dsalgs
+#include "hb-array.hh" // Requires: hb-dsalgs hb-iter hb-null
+#include "hb-vector.hh" // Requires: hb-array hb-null
+#include "hb-object.hh" // Requires: hb-atomic hb-mutex hb-vector
#endif /* HB_HH */
diff --git a/src/test-iter.cc b/src/test-iter.cc
index 4daa971..5cd0cc6 100644
--- a/src/test-iter.cc
+++ b/src/test-iter.cc
@@ -24,6 +24,7 @@
* Google Author(s): Behdad Esfahbod
*/
+#include "hb.hh"
#include "hb-iter.hh"
#include "hb-array.hh"
diff --git a/src/test-unicode-ranges.cc b/src/test-unicode-ranges.cc
index d5d39b9..0eef8c2 100644
--- a/src/test-unicode-ranges.cc
+++ b/src/test-unicode-ranges.cc
@@ -24,6 +24,7 @@
* Google Author(s): Garret Rieger
*/
+#include "hb.hh"
#include "hb-ot-os2-unicode-ranges.hh"
static void