Add glsl_type::element_type and glsl_type::array_size queries
authorIan Romanick <ian.d.romanick@intel.com>
Fri, 2 Apr 2010 00:17:34 +0000 (17:17 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Fri, 2 Apr 2010 00:17:34 +0000 (17:17 -0700)
The former gets the type of elements in an array, and the later gets
the declared size, if any, of the array.

glsl_types.h

index 6c9444c..33b1c98 100644 (file)
@@ -164,6 +164,18 @@ struct glsl_type {
    const glsl_type *get_base_type() const;
 
    /**
+    * Query the type of elements in an array
+    *
+    * \return
+    * Pointer to the type of elements in the array for array types, or \c NULL
+    * for non-array types.
+    */
+   const glsl_type *element_type() const
+   {
+      return is_array() ? fields.array : NULL;
+   }
+
+   /**
     * Get the instance of a built-in scalar, vector, or matrix type
     */
    static const glsl_type *get_instance(unsigned base_type, unsigned rows,
@@ -308,6 +320,19 @@ struct glsl_type {
         : error_type;
    }
 
+   /**
+    * Query the number of elements in an array type
+    *
+    * \return
+    * The number of elements in the array for array types or -1 for non-array
+    * types.  If the number of elements in the array has not yet been declared,
+    * zero is returned.
+    */
+   int array_size() const
+   {
+      return is_array() ? length : -1;
+   }
+
 private:
    /**
     * Constructor for array types