Revision: 45924
          http://brlcad.svn.sourceforge.net/brlcad/?rev=45924&view=rev
Author:   n_reed
Date:     2011-08-11 14:19:39 +0000 (Thu, 11 Aug 2011)

Log Message:
-----------
Using more readable names. Removed unused typedefs and some cryptic size checks 
of questionable utility.

Modified Paths:
--------------
    brlcad/trunk/src/libgcv/wfobj/obj_grammar.yy
    brlcad/trunk/src/libgcv/wfobj/obj_parser.cpp
    brlcad/trunk/src/libgcv/wfobj/obj_parser.h
    brlcad/trunk/src/libgcv/wfobj/obj_parser_state.h
    brlcad/trunk/src/libgcv/wfobj/obj_rules.ll

Modified: brlcad/trunk/src/libgcv/wfobj/obj_grammar.yy
===================================================================
--- brlcad/trunk/src/libgcv/wfobj/obj_grammar.yy        2011-08-11 11:14:44 UTC 
(rev 45923)
+++ brlcad/trunk/src/libgcv/wfobj/obj_grammar.yy        2011-08-11 14:19:39 UTC 
(rev 45924)
@@ -75,26 +75,26 @@
 static const char line_length_err[] = "Lines must contain at least 2 "
                                      "references";
 
-typedef parser_extra::contents_type contents_type;
-typedef parser_extra::parser_state_type parser_state_type;
+typedef objCombinedState::contents_type contents_type;
+typedef objCombinedState::parser_state_type parser_state_type;
 
 /**
  *  convenience routines
  */
 inline static parser_state_type & get_state(yyscan_t scanner) {
-    return 
static_cast<parser_extra*>(obj_parser_get_extra(scanner))->parser_state;
+    return 
static_cast<objCombinedState*>(obj_parser_get_extra(scanner))->parser_state;
 }
 
-inline static parser_extra::parser_type & get_parser(yyscan_t scanner) {
-    return 
*(static_cast<parser_extra*>(obj_parser_get_extra(scanner))->parser);
+inline static objCombinedState::parser_type & get_parser(yyscan_t scanner) {
+    return 
*(static_cast<objCombinedState*>(obj_parser_get_extra(scanner))->parser);
 }
 
 inline static contents_type & get_contents(yyscan_t scanner) {
-    return 
*(static_cast<parser_extra*>(obj_parser_get_extra(scanner))->contents);
+    return 
*(static_cast<objCombinedState*>(obj_parser_get_extra(scanner))->contents);
 }
 
-inline static parser_extra & get_extra(yyscan_t scanner) {
-    return *static_cast<parser_extra*>(obj_parser_get_extra(scanner));
+inline static objCombinedState & get_extra(yyscan_t scanner) {
+    return *static_cast<objCombinedState*>(obj_parser_get_extra(scanner));
 }
 
 inline static size_t real_index(int val, std::size_t nvert) {
@@ -220,12 +220,12 @@
 vertex
 : VERTEX coord coord coord
 {
-    detail::obj_contents::gvertex_t vertex = {{$2, $3, $4, 1}};
+    detail::objFileContents::gvertex_t vertex = {{$2, $3, $4, 1}};
     detail::get_contents(scanner).gvertices_list.push_back(vertex);
 }
 | VERTEX coord coord coord coord
 {
-    detail::obj_contents::gvertex_t vertex = {{$2, $3, $4, $5}};
+    detail::objFileContents::gvertex_t vertex = {{$2, $3, $4, $5}};
     detail::get_contents(scanner).gvertices_list.push_back(vertex);
 }
 ;
@@ -233,17 +233,17 @@
 t_vertex
 : T_VERTEX coord
 {
-    detail::obj_contents::tvertex_t vertex = {{$2, 0, 0}};
+    detail::objFileContents::tvertex_t vertex = {{$2, 0, 0}};
     detail::get_contents(scanner).tvertices_list.push_back(vertex);
 }
 | T_VERTEX coord coord
 {
-    detail::obj_contents::tvertex_t vertex = {{$2, $3, 0}};
+    detail::objFileContents::tvertex_t vertex = {{$2, $3, 0}};
     detail::get_contents(scanner).tvertices_list.push_back(vertex);
 }
 | T_VERTEX coord coord coord
 {
-    detail::obj_contents::tvertex_t vertex = {{$2, $3, $4}};
+    detail::objFileContents::tvertex_t vertex = {{$2, $3, $4}};
     detail::get_contents(scanner).tvertices_list.push_back(vertex);
 }
 ;
@@ -251,7 +251,7 @@
 n_vertex
 : N_VERTEX coord coord coord
 {
-    detail::obj_contents::nvertex_t vertex = {{$2, $3, $4}};
+    detail::objFileContents::nvertex_t vertex = {{$2, $3, $4}};
     detail::get_contents(scanner).nvertices_list.push_back(vertex);
 }
 ;

Modified: brlcad/trunk/src/libgcv/wfobj/obj_parser.cpp
===================================================================
--- brlcad/trunk/src/libgcv/wfobj/obj_parser.cpp        2011-08-11 11:14:44 UTC 
(rev 45923)
+++ brlcad/trunk/src/libgcv/wfobj/obj_parser.cpp        2011-08-11 14:19:39 UTC 
(rev 45924)
@@ -17,6 +17,15 @@
  * License along with this file; see the file named COPYING for more
  * information.
  */
+/* This file implements the obj parser interface defined in obj_parser.h.
+ *
+ * Code that wants to use the interface should create a handle of type
+ * obj_parser_t and pass it to obj_parser_create() to initialize it.
+ *
+ * Parsing is done using the obj_parse() or obj_fparse() functions, which take
+ * an input, a parser handle, and an obj_contents_t to return the parsed file
+ * contents in.
+ */
 
 #include "obj_parser.h"
 #include "obj_parser_state.h"
@@ -37,7 +46,6 @@
     void operator()(FILE*) {}
 };
 
-
 template<typename ObjContentsT>
 static int set_stream(FILE *stream, basic_parser_state<ObjContentsT> &state)
 {
@@ -107,12 +115,27 @@
 extern "C" {
 #endif
 
+static void createScanner(yyscan_t *scanner)
+{
+    obj_parser_lex_init(scanner);
+}
+
+static void setScannerIn(yyscan_t scanner, FILE *in)
+{
+    obj_parser_set_in(in, scanner);
+}
+
+static void setScannerExtra(yyscan_t scanner, detail::objCombinedState *extra)
+{
+    obj_parser_set_extra(extra, scanner);
+}
+
 int obj_parser_create(obj_parser_t *parser)
 {
     int err = 0;
 
     try {
-       parser->p = new detail::obj_parser;
+       parser->p = new detail::objParser;
     } catch (std::bad_alloc &) {
        err = ENOMEM;
     } catch (...) {
@@ -126,7 +149,7 @@
 void obj_parser_destroy(obj_parser_t parser)
 {
     try {
-       delete static_cast<detail::obj_parser*>(parser.p);
+       delete static_cast<detail::objParser*>(parser.p);
        parser.p = 0;
     } catch(...) {
        abort();
@@ -137,14 +160,14 @@
 int obj_parse(const char *filename, obj_parser_t parser,
              obj_contents_t *contents)
 {
-    detail::obj_parser *p = static_cast<detail::obj_parser*>(parser.p);
+    detail::objParser *p = static_cast<detail::objParser*>(parser.p);
 
     int err = 0;
 
     try {
-       std::auto_ptr<detail::obj_contents> sentry(new detail::obj_contents);
+       std::auto_ptr<detail::objFileContents> sentry(new 
detail::objFileContents);
 
-       detail::parser_extra extra(p, sentry.get());
+       detail::objCombinedState extra(p, sentry.get());
 
        if ((err =
             detail::open_file(std::string(filename), extra.parser_state))) {
@@ -152,14 +175,13 @@
        }
 
        yyscan_t scanner;
-       obj_parser_lex_init(&scanner);
+       createScanner(&scanner);
+
        detail::lex_sentry lsentry(scanner);
 
-       obj_parser_set_in(extra.parser_state.file_stack.back().file.get(),
-                         scanner);
+       setScannerIn(scanner, extra.parser_state.file_stack.back().file.get());
+       setScannerExtra(scanner, &extra);
 
-       obj_parser_set_extra(&extra, scanner);
-
        err = obj_parser_parse(scanner);
 
        p->last_error = extra.parser_state.err.str();
@@ -188,28 +210,27 @@
 
 int obj_fparse(FILE *stream, obj_parser_t parser, obj_contents_t *contents)
 {
-    detail::obj_parser *p = static_cast<detail::obj_parser*>(parser.p);
+    detail::objParser *p = static_cast<detail::objParser*>(parser.p);
 
     int err = 0;
 
     try {
-       std::auto_ptr<detail::obj_contents> sentry(new detail::obj_contents);
+       std::auto_ptr<detail::objFileContents> sentry(new 
detail::objFileContents);
 
-       detail::parser_extra extra(p, sentry.get());
+       detail::objCombinedState extra(p, sentry.get());
 
        if ((err = detail::set_stream(stream, extra.parser_state))) {
            return err;
        }
 
        yyscan_t scanner;
-       obj_parser_lex_init(&scanner);
+       createScanner(&scanner);
+
        detail::lex_sentry lsentry(scanner);
 
-       obj_parser_set_in(extra.parser_state.file_stack.back().file.get(),
-                         scanner);
+       setScannerIn(scanner, extra.parser_state.file_stack.back().file.get());
+       setScannerExtra(scanner, &extra);
 
-       obj_parser_set_extra(&extra, scanner);
-
        err = obj_parser_parse(scanner);
 
        p->last_error = extra.parser_state.err.str();
@@ -241,7 +262,7 @@
     const char *err = 0;
 
     try {
-       detail::obj_parser *p = static_cast<detail::obj_parser*>(parser.p);
+       detail::objParser *p = static_cast<detail::objParser*>(parser.p);
 
        if (!(p->last_error.empty())) {
            err = p->last_error.c_str();
@@ -257,7 +278,7 @@
 int obj_contents_destroy(obj_contents_t contents)
 {
     try {
-       delete static_cast<detail::obj_contents*>(contents.p);
+       delete static_cast<detail::objFileContents*>(contents.p);
        contents.p = 0;
     } catch(...) {
        abort();
@@ -270,13 +291,10 @@
 size_t obj_vertices(obj_contents_t contents, const float (*val_arr[])[4])
 {
     try {
-       detail::size_check<sizeof(float[4]),
-           sizeof(detail::obj_contents::gvertex_t)>::ok();
+       detail::objFileContents *c =
+           static_cast<detail::objFileContents*>(contents.p);
 
-       detail::obj_contents *c =
-           static_cast<detail::obj_contents*>(contents.p);
-
-       // coerce vector<chunk<float, 4> > to size_t arr[][4]
+       // coerce vector<tuple<float, 4> > to size_t arr[][4]
        if (val_arr && c->gvertices_list.size()) {
            *val_arr = &(c->gvertices_list.front().v);
        }
@@ -293,13 +311,10 @@
 size_t obj_texture_coord(obj_contents_t contents, const float (*val_arr[])[3])
 {
     try {
-       detail::size_check<sizeof(float[3]),
-           sizeof(detail::obj_contents::tvertex_t)>::ok();
+       detail::objFileContents *c =
+           static_cast<detail::objFileContents*>(contents.p);
 
-       detail::obj_contents *c =
-           static_cast<detail::obj_contents*>(contents.p);
-
-       // coerce vector<chunk<float, 3> > to size_t arr[][3]
+       // coerce vector<tuple<float, 3> > to size_t arr[][3]
        if (val_arr && c->tvertices_list.size()) {
            *val_arr = &(c->tvertices_list.front().v);
        }
@@ -316,13 +331,10 @@
 size_t obj_normals(obj_contents_t contents, const float (*val_arr[])[3])
 {
     try {
-       detail::size_check<sizeof(float[3]),
-           sizeof(detail::obj_contents::nvertex_t)>::ok();
+       detail::objFileContents *c =
+           static_cast<detail::objFileContents*>(contents.p);
 
-       detail::obj_contents *c =
-           static_cast<detail::obj_contents*>(contents.p);
-
-       // coerce vector<chunk<float, 3> > to size_t arr[][3]
+       // coerce vector<tuple<float, 3> > to size_t arr[][3]
        if (val_arr && c->nvertices_list.size()) {
            *val_arr = &(c->nvertices_list.front().v);
        }
@@ -339,7 +351,7 @@
 size_t obj_groups(obj_contents_t contents, const char * const (*val_arr[]))
 {
     try {
-       detail::obj_contents *c = 
static_cast<detail::obj_contents*>(contents.p);
+       detail::objFileContents *c = 
static_cast<detail::objFileContents*>(contents.p);
 
        if (val_arr && c->groupchar_set.size()) {
            *val_arr = &(c->groupchar_set.front());
@@ -357,8 +369,8 @@
 size_t obj_num_groupsets(obj_contents_t contents)
 {
     try {
-       detail::obj_contents *c =
-           static_cast<detail::obj_contents*>(contents.p);
+       detail::objFileContents *c =
+           static_cast<detail::objFileContents*>(contents.p);
 
        return c->groupindex_set.size();
     } catch(...) {
@@ -373,8 +385,8 @@
                    const size_t (*index_arr[]))
 {
     try {
-       detail::obj_contents *c =
-           static_cast<detail::obj_contents*>(contents.p);
+       detail::objFileContents *c =
+           static_cast<detail::objFileContents*>(contents.p);
 
        if (index_arr && c->groupindex_set[n].size()) {
            *index_arr = &(c->groupindex_set[n].front());
@@ -392,8 +404,8 @@
 size_t obj_objects(obj_contents_t contents, const char * const (*val_arr[]))
 {
     try {
-       detail::obj_contents *c =
-           static_cast<detail::obj_contents*>(contents.p);
+       detail::objFileContents *c =
+           static_cast<detail::objFileContents*>(contents.p);
 
        if (val_arr && c->objectchar_set.size()) {
            *val_arr = &(c->objectchar_set.front());
@@ -411,8 +423,8 @@
 size_t obj_materials(obj_contents_t contents, const char * const (*val_arr[]))
 {
     try {
-       detail::obj_contents *c =
-           static_cast<detail::obj_contents*>(contents.p);
+       detail::objFileContents *c =
+           static_cast<detail::objFileContents*>(contents.p);
 
        if (val_arr && c->materialchar_set.size()) {
            *val_arr = &(c->materialchar_set.front());
@@ -431,8 +443,8 @@
                        const char * const (*val_arr[]))
 {
     try {
-       detail::obj_contents *c =
-           static_cast<detail::obj_contents*>(contents.p);
+       detail::objFileContents *c =
+           static_cast<detail::objFileContents*>(contents.p);
 
        if (val_arr && c->materiallibchar_set.size()) {
            *val_arr = &(c->materiallibchar_set.front());
@@ -450,8 +462,8 @@
 size_t obj_num_materiallibsets(obj_contents_t contents)
 {
     try {
-       detail::obj_contents *c =
-       static_cast<detail::obj_contents*>(contents.p);
+       detail::objFileContents *c =
+       static_cast<detail::objFileContents*>(contents.p);
 
        return c->materiallibindex_set.size();
     } catch(...) {
@@ -465,8 +477,8 @@
 size_t obj_materiallibset(obj_contents_t contents, size_t n, const size_t 
(*index_arr[]))
 {
     try {
-       detail::obj_contents *c =
-           static_cast<detail::obj_contents*>(contents.p);
+       detail::objFileContents *c =
+           static_cast<detail::objFileContents*>(contents.p);
 
        if (index_arr && c->materiallibindex_set[n].size()) {
            *index_arr = &(c->materiallibindex_set[n].front());
@@ -484,8 +496,8 @@
 size_t obj_texmaps(obj_contents_t contents, const char * const (*val_arr[]))
 {
     try {
-       detail::obj_contents *c =
-           static_cast<detail::obj_contents*>(contents.p);
+       detail::objFileContents *c =
+           static_cast<detail::objFileContents*>(contents.p);
 
        if (val_arr && c->texmapchar_set.size()) {
            *val_arr = &(c->texmapchar_set.front());
@@ -503,8 +515,8 @@
 size_t obj_texmaplibs(obj_contents_t contents, const char * const (*val_arr[]))
 {
     try {
-       detail::obj_contents *c =
-           static_cast<detail::obj_contents*>(contents.p);
+       detail::objFileContents *c =
+           static_cast<detail::objFileContents*>(contents.p);
 
        if (val_arr && c->texmaplibchar_set.size()) {
            *val_arr = &(c->texmaplibchar_set.front());
@@ -522,8 +534,8 @@
 size_t obj_num_texmaplibsets(obj_contents_t contents)
 {
     try {
-       detail::obj_contents *c =
-           static_cast<detail::obj_contents*>(contents.p);
+       detail::objFileContents *c =
+           static_cast<detail::objFileContents*>(contents.p);
 
        return c->texmaplibindex_set.size();
     } catch(...) {
@@ -538,8 +550,8 @@
                        const size_t (*index_arr[]))
 {
     try {
-       detail::obj_contents *c =
-           static_cast<detail::obj_contents*>(contents.p);
+       detail::objFileContents *c =
+           static_cast<detail::objFileContents*>(contents.p);
 
        if (index_arr && c->texmaplibindex_set[n].size()) {
            *index_arr = &(c->texmaplibindex_set[n].front());
@@ -557,8 +569,8 @@
 size_t obj_shadow_objs(obj_contents_t contents, const char * const 
(*val_arr[]))
 {
     try {
-       detail::obj_contents *c =
-           static_cast<detail::obj_contents*>(contents.p);
+       detail::objFileContents *c =
+           static_cast<detail::objFileContents*>(contents.p);
 
        if (val_arr && c->shadow_objchar_set.size()) {
            *val_arr = &(c->shadow_objchar_set.front());
@@ -576,8 +588,8 @@
 size_t obj_trace_objs(obj_contents_t contents, const char * const (*val_arr[]))
 {
     try {
-       detail::obj_contents *c =
-           static_cast<detail::obj_contents*>(contents.p);
+       detail::objFileContents *c =
+           static_cast<detail::objFileContents*>(contents.p);
 
        if (val_arr && c->trace_objchar_set.size()) {
            *val_arr = &(c->trace_objchar_set.front());
@@ -596,8 +608,8 @@
                                const obj_polygonal_attributes_t (*attr_list[]))
 {
     try {
-       detail::obj_contents *c =
-           static_cast<detail::obj_contents*>(contents.p);
+       detail::objFileContents *c =
+           static_cast<detail::objFileContents*>(contents.p);
 
        if (attr_list && c->polyattributes_set.size()) {
            *attr_list = &(c->polyattributes_set.front());
@@ -616,8 +628,8 @@
                              const size_t (*attindex_arr[]))
 {
     try {
-       detail::obj_contents *c =
-           static_cast<detail::obj_contents*>(contents.p);
+       detail::objFileContents *c =
+           static_cast<detail::objFileContents*>(contents.p);
 
        if (attindex_arr && c->point_v_attr_list.size()) {
            *attindex_arr = &(c->point_v_attr_list.front());
@@ -636,8 +648,8 @@
                                      const size_t (*index_arr[]))
 {
     try {
-       detail::obj_contents *c =
-           static_cast<detail::obj_contents*>(contents.p);
+       detail::objFileContents *c =
+           static_cast<detail::objFileContents*>(contents.p);
 
        if (index_arr && c->point_v_loclist[face].second) {
            *index_arr = 
&(c->point_v_indexlist[c->point_v_loclist[face].first]);
@@ -656,8 +668,8 @@
                             const size_t (*attindex_arr[]))
 {
     try {
-       detail::obj_contents *c =
-           static_cast<detail::obj_contents*>(contents.p);
+       detail::objFileContents *c =
+           static_cast<detail::objFileContents*>(contents.p);
 
        if (attindex_arr && c->line_v_attr_list.size()) {
            *attindex_arr = &(c->line_v_attr_list.front());
@@ -676,8 +688,8 @@
                                     const size_t (*index_arr[]))
 {
     try {
-       detail::obj_contents *c =
-           static_cast<detail::obj_contents*>(contents.p);
+       detail::objFileContents *c =
+           static_cast<detail::objFileContents*>(contents.p);
 
        if (index_arr && c->line_v_loclist[face].second) {
            *index_arr = &(c->line_v_indexlist[c->line_v_loclist[face].first]);
@@ -696,8 +708,8 @@
                              const size_t (*attindex_arr[]))
 {
     try {
-       detail::obj_contents *c =
-           static_cast<detail::obj_contents*>(contents.p);
+       detail::objFileContents *c =
+           static_cast<detail::objFileContents*>(contents.p);
 
        if (attindex_arr && c->line_tv_attr_list.size()) {
            *attindex_arr = &(c->line_tv_attr_list.front());
@@ -716,13 +728,10 @@
                                      const size_t (*index_arr[])[2])
 {
     try {
-       detail::size_check<sizeof(size_t[2]),
-           sizeof(detail::obj_contents::polygonal_tv_index_type)>::ok();
+       detail::objFileContents *c =
+           static_cast<detail::objFileContents*>(contents.p);
 
-       detail::obj_contents *c =
-           static_cast<detail::obj_contents*>(contents.p);
-
-       // coerce vector<chunk<size_t, 2> > to size_t arr[][2]
+       // coerce vector<tuple<size_t, 2> > to size_t arr[][2]
        if (index_arr && c->line_tv_loclist[face].second) {
            *index_arr = 
&(c->line_tv_indexlist[c->line_tv_loclist[face].first].v);
        }
@@ -740,8 +749,8 @@
                             const size_t (*attindex_arr[]))
 {
     try {
-       detail::obj_contents *c =
-           static_cast<detail::obj_contents*>(contents.p);
+       detail::objFileContents *c =
+           static_cast<detail::objFileContents*>(contents.p);
 
        if (attindex_arr && c->polygonal_v_attr_list.size()) {
            *attindex_arr = &(c->polygonal_v_attr_list.front());
@@ -760,8 +769,8 @@
                                     const size_t (*index_arr[]))
 {
     try {
-       detail::obj_contents *c =
-           static_cast<detail::obj_contents*>(contents.p);
+       detail::objFileContents *c =
+           static_cast<detail::objFileContents*>(contents.p);
 
        if (index_arr && c->polygonal_v_loclist[face].second) {
            *index_arr =
@@ -781,8 +790,8 @@
                              const size_t (*attindex_arr[]))
 {
     try {
-       detail::obj_contents *c =
-           static_cast<detail::obj_contents*>(contents.p);
+       detail::objFileContents *c =
+           static_cast<detail::objFileContents*>(contents.p);
 
        if (attindex_arr && c->polygonal_tv_attr_list.size()) {
            *attindex_arr = &(c->polygonal_tv_attr_list.front());
@@ -801,13 +810,10 @@
                                      const size_t (*index_arr[])[2])
 {
     try {
-       detail::size_check<sizeof(size_t[2]),
-           sizeof(detail::obj_contents::polygonal_tv_index_type)>::ok();
+       detail::objFileContents *c =
+           static_cast<detail::objFileContents*>(contents.p);
 
-       detail::obj_contents *c =
-           static_cast<detail::obj_contents*>(contents.p);
-
-       // coerce vector<chunk<size_t, 2> > to size_t arr[][2]
+       // coerce vector<tuple<size_t, 2> > to size_t arr[][2]
        if (index_arr && c->polygonal_tv_loclist[face].second) {
            *index_arr = 
&(c->pologonal_tv_indexlist[c->polygonal_tv_loclist[face].first].v);
        }
@@ -826,8 +832,8 @@
                              const size_t (*attindex_arr[]))
 {
     try {
-       detail::obj_contents *c =
-           static_cast<detail::obj_contents*>(contents.p);
+       detail::objFileContents *c =
+           static_cast<detail::objFileContents*>(contents.p);
 
        if (attindex_arr && c->polygonal_nv_attr_list.size()) {
            *attindex_arr = &(c->polygonal_nv_attr_list.front());
@@ -846,13 +852,10 @@
                                      const size_t (*index_arr[])[2])
 {
     try {
-       detail::size_check<sizeof(size_t[2]),
-           sizeof(detail::obj_contents::polygonal_nv_index_type)>::ok();
+       detail::objFileContents *c =
+           static_cast<detail::objFileContents*>(contents.p);
 
-       detail::obj_contents *c =
-           static_cast<detail::obj_contents*>(contents.p);
-
-       // coerce vector<chunk<size_t, 2> > to size_t arr[][2]
+       // coerce vector<tuple<size_t, 2> > to size_t arr[][2]
        if (index_arr && c->polygonal_nv_loclist[face].second) {
            *index_arr = 
&(c->pologonal_nv_indexlist[c->polygonal_nv_loclist[face].first].v);
        }
@@ -870,8 +873,8 @@
                               const size_t (*attindex_arr[]))
 {
     try {
-       detail::obj_contents *c =
-           static_cast<detail::obj_contents*>(contents.p);
+       detail::objFileContents *c =
+           static_cast<detail::objFileContents*>(contents.p);
 
        if (attindex_arr && c->polygonal_tnv_attr_list.size()) {
            *attindex_arr = &(c->polygonal_tnv_attr_list.front());
@@ -890,13 +893,10 @@
                                       const size_t (*index_arr[])[3])
 {
     try {
-       detail::size_check<sizeof(size_t[3]),
-           sizeof(detail::obj_contents::polygonal_tnv_index_type)>::ok();
+       detail::objFileContents *c =
+           static_cast<detail::objFileContents*>(contents.p);
 
-       detail::obj_contents *c =
-           static_cast<detail::obj_contents*>(contents.p);
-
-       // coerce vector<chunk<size_t, 3> > to size_t arr[][3]
+       // coerce vector<tuple<size_t, 3> > to size_t arr[][3]
        if (index_arr && c->polygonal_tnv_loclist[face].second) {
            *index_arr = 
&(c->pologonal_tnv_indexlist[c->polygonal_tnv_loclist[face].first].v);
        }

Modified: brlcad/trunk/src/libgcv/wfobj/obj_parser.h
===================================================================
--- brlcad/trunk/src/libgcv/wfobj/obj_parser.h  2011-08-11 11:14:44 UTC (rev 
45923)
+++ brlcad/trunk/src/libgcv/wfobj/obj_parser.h  2011-08-11 14:19:39 UTC (rev 
45924)
@@ -27,14 +27,16 @@
 #endif
 
 /**
- *  A structure containing a wavefront obj parser
+ *  A structure containing a wavefront obj parser.
+ *  This is a C wrapper for objParser.
  */
 typedef struct {
     void *p;
 } obj_parser_t;
 
 /**
- *  A structure containing the contents of a parsed wavefront obj file
+ *  A structure containing the contents of a parsed wavefront obj file.
+ *  This is a C wrapper for objFileContents.
  */
 typedef struct {
     void *p;

Modified: brlcad/trunk/src/libgcv/wfobj/obj_parser_state.h
===================================================================
--- brlcad/trunk/src/libgcv/wfobj/obj_parser_state.h    2011-08-11 11:14:44 UTC 
(rev 45923)
+++ brlcad/trunk/src/libgcv/wfobj/obj_parser_state.h    2011-08-11 14:19:39 UTC 
(rev 45924)
@@ -61,56 +61,43 @@
 namespace obj_parser {
 namespace detail {
 
-/**
- *  chunk is a generic compile-time tiple of three
- */
 template<typename T, std::size_t N>
-struct chunk {
-    typedef T value_type;
-  
+struct tuple {
     T v[N];
 };
 
 
-template<typename T, std::size_t N, std::size_t L>
-struct chunk_compare {
-    bool compare(chunk<T, N> &lhs, const chunk<T, N> &rhs) {
-       return lhs[L] == rhs[L] && chunk_compare<T, N, L - 1>(lhs, rhs);
+/* recursive tuple comparison */
+template<typename T, std::size_t N, std::size_t i>
+struct tuple_compare {
+    bool compare(tuple<T, N> &lhs, const tuple<T, N> &rhs) {
+       return lhs[i] == rhs[i] && tuple_compare<T, N, i - 1>(lhs, rhs);
     }
 };
 
-
+/* tuple comparison base case */
 template<typename T, std::size_t N>
-struct chunk_compare<T, N, 0> {
-    void compare(chunk<T, N> &lhs, const chunk<T, N> &rhs) {
+struct tuple_compare<T, N, 0> {
+    void compare(tuple<T, N> &lhs, const tuple<T, N> &rhs) {
        return lhs[0] == rhs[0];
     }
 };
 
 
 template<typename T, std::size_t N>
-inline bool operator==(const chunk<T, N> &lhs, const chunk<T, N> &rhs)
+inline bool operator==(const tuple<T, N> &lhs, const tuple<T, N> &rhs)
 {
-    return chunk_compare<T, N, N>::compare(lhs, rhs);
+    return tuple_compare<T, N, N>::compare(lhs, rhs);
 }
 
-
-template<int A, int B>
-struct size_check {};
-
-template<int Size>
-struct size_check<Size, Size> {
-    static void ok(void) {}
-};
-
-
 /**
  *  Basic parser object, persistant across multiple file parsings
  *
- *  Lifetime is controlled by the used via obj_parser_create
+ *  Lifetime is controlled by the user via obj_parser_create
  *  and obj_parser_destroy.
  */
-template<typename charT=char, typename traits=std::char_traits<char>,
+template<typename charT=char,
+        typename traits=std::char_traits<char>,
         typename Allocator=std::allocator<char> >
 struct basic_obj_parser {
     typedef std::basic_string<charT, traits, Allocator> string_type;
@@ -119,20 +106,21 @@
     string_type last_error;
 };
 
-
-template<typename PrecisionT, typename charT=char,
+/* contents of an obj file */
+template<typename PrecisionT,
+        typename charT=char,
         typename traits=std::char_traits<char>,
         typename Allocator=std::allocator<char> >
 struct basic_obj_contents {
     typedef PrecisionT precision_type;
-    typedef chunk<precision_type, 4> gvertex_t;
-    typedef chunk<precision_type, 3> tvertex_t;
-    typedef chunk<precision_type, 3> nvertex_t;
+    typedef tuple<precision_type, 4> gvertex_t;
+    typedef tuple<precision_type, 3> tvertex_t;
+    typedef tuple<precision_type, 3> nvertex_t;
 
     typedef size_t polygonal_v_index_type;
-    typedef chunk<size_t, 2> polygonal_tv_index_type;
-    typedef chunk<size_t, 2> polygonal_nv_index_type;
-    typedef chunk<size_t, 3> polygonal_tnv_index_type;
+    typedef tuple<size_t, 2> polygonal_tv_index_type;
+    typedef tuple<size_t, 2> polygonal_nv_index_type;
+    typedef tuple<size_t, 3> polygonal_tnv_index_type;
 
     // indexloc_t := {start, length}
     typedef std::pair<size_t, size_t> indexloc_t;
@@ -227,7 +215,7 @@
     indexvec_type polygonal_tnv_attr_list;
     indexloc_vec_type polygonal_tnv_loclist;
     polygonal_tnv_indexvec_type pologonal_tnv_indexlist;
-};
+}; /* basic_obj_contents */
 
 
 template<typename ObjContentsT>
@@ -242,9 +230,9 @@
   
     typedef std::size_t index_type;
   
-    typedef chunk<index_type, 1> index1_type;
-    typedef chunk<index_type, 2> index2_type;
-    typedef chunk<index_type, 3> index3_type;
+    typedef tuple<index_type, 1> index1_type;
+    typedef tuple<index_type, 2> index2_type;
+    typedef tuple<index_type, 3> index3_type;
 
     typedef typename contents_type::polygonal_v_indexvec_type
        polygonal_v_indexvec_type;
@@ -358,17 +346,17 @@
     bool polyattributes_dirty;
     polyattributes_vec_index_type current_polyattributes;
     polyattributes_index_map_type polyattributes_index_map;
-};
+}; /* basic_parser_state */
 
 
 /**
  *  Composition object for dealing with lex/lacc reentrant interface.
- *  ie all extra info gets attached via a void * in lex/yacc
  *
  *  Lifetime is only until the parse completion of a single file and 
  *  it's includes.
  */
-template<typename PrecisionT, typename charT=char,
+template<typename PrecisionT,
+        typename charT=char,
         typename traits=std::char_traits<char>,
         typename Allocator=std::allocator<char> >
 struct basic_parser_extra {
@@ -392,7 +380,9 @@
 };
 
 
-template<typename PrecisionT, typename charT, typename traits,
+template<typename PrecisionT,
+        typename charT,
+        typename traits,
         typename Allocator>
 void set_working_groupset(basic_parser_extra<PrecisionT, charT, traits,
                                             Allocator> &extra)
@@ -464,10 +454,12 @@
        extra.parser_state.current_groupset;
 
     extra.parser_state.polyattributes_dirty = true;
-}
+} /* set working groupset */
 
 
-template<typename PrecisionT, typename charT, typename traits,
+template<typename PrecisionT,
+        typename charT,
+        typename traits,
         typename Allocator>
 void set_working_object(basic_parser_extra<PrecisionT, charT, traits,
                                           Allocator> &extra)
@@ -500,10 +492,12 @@
        extra.parser_state.current_object;
 
     extra.parser_state.polyattributes_dirty = true;
-}
+} /* set_working_object */
 
 
-template<typename PrecisionT, typename charT, typename traits,
+template<typename PrecisionT,
+        typename charT,
+        typename traits,
         typename Allocator>
 void set_working_material(basic_parser_extra<PrecisionT, charT, traits,
                                             Allocator> &extra)
@@ -537,10 +531,11 @@
        extra.parser_state.current_material;
 
     extra.parser_state.polyattributes_dirty = true;
-}
+} /* set_working_material */
 
-
-template<typename PrecisionT, typename charT, typename traits,
+template<typename PrecisionT,
+        typename charT,
+        typename traits,
         typename Allocator>
 void set_working_materiallib(basic_parser_extra<PrecisionT, charT, traits,
                                                Allocator> &extra)
@@ -613,10 +608,12 @@
        extra.parser_state.current_materiallib;
 
     extra.parser_state.polyattributes_dirty = true;
-}
+} /* set_working_materiallib */
 
 
-template<typename PrecisionT, typename charT, typename traits,
+template<typename PrecisionT,
+        typename charT,
+        typename traits,
         typename Allocator>
 void set_working_texmap(basic_parser_extra<PrecisionT, charT, traits,
                                           Allocator> &extra)
@@ -649,10 +646,12 @@
        extra.parser_state.current_texmap;
 
     extra.parser_state.polyattributes_dirty = true;
-}
+} /* set_working_texmap */
 
 
-template<typename PrecisionT, typename charT, typename traits,
+template<typename PrecisionT,
+        typename charT,
+        typename traits,
         typename Allocator>
 void set_working_texmaplib(basic_parser_extra<PrecisionT, charT, traits,
                                              Allocator> &extra)
@@ -725,10 +724,12 @@
        extra.parser_state.current_texmaplib;
 
     extra.parser_state.polyattributes_dirty = true;
-}
+} /* set_working_texmaplib */
 
 
-template<typename PrecisionT, typename charT, typename traits,
+template<typename PrecisionT,
+        typename charT,
+        typename traits,
         typename Allocator>
 void set_working_shadow_obj(basic_parser_extra<PrecisionT, charT, traits,
                                               Allocator> &extra)
@@ -762,10 +763,12 @@
        extra.parser_state.current_shadow_obj;
 
     extra.parser_state.polyattributes_dirty = true;
-}
+} /* set_working_shadow_obj */
 
 
-template<typename PrecisionT, typename charT, typename traits,
+template<typename PrecisionT,
+        typename charT,
+        typename traits,
         typename Allocator>
 void set_working_trace_obj(basic_parser_extra<PrecisionT, charT, traits,
                                              Allocator> &extra)
@@ -799,10 +802,12 @@
        extra.parser_state.current_trace_obj;
 
     extra.parser_state.polyattributes_dirty = true;
-}
+} /* set_working_trace_obj */
 
 
-template<typename PrecisionT, typename charT, typename traits,
+template<typename PrecisionT,
+        typename charT,
+        typename traits,
         typename Allocator>
 void set_working_polygattributes(basic_parser_extra<PrecisionT, charT, traits,
                                                    Allocator> &extra)
@@ -832,7 +837,9 @@
  *  Set the inital values of the lookup tables to the first element in the
  *  contents
  */
-template<typename PrecisionT, typename charT, typename traits,
+template<typename PrecisionT,
+        typename charT,
+        typename traits,
         typename Allocator>
 basic_parser_extra<PrecisionT, charT, traits, Allocator>::
 basic_parser_extra(parser_type *p, contents_type *c) :parser(p), contents(c)
@@ -900,30 +907,10 @@
              << state.file_stack.back().lineno << ": " << s;
 }
 
+typedef basic_obj_contents<float, char> objFileContents;
+typedef basic_obj_parser<char> objParser;
+typedef basic_parser_extra<float, char> objCombinedState;
 
-/**
- *  Typedefs for common uses:
- *  
- *  lack of a precision prefix denotes single precision
- *  'd' prefix denotes double precision
- *  lack of a character prefix denotes 'char'
- *  'w' character prefix denotes 'w_char_t'
- */
-typedef basic_obj_contents<float, char> obj_contents;
-typedef basic_obj_contents<float, wchar_t> wobj_contents;
-typedef basic_obj_contents<double, char> dobj_contents;
-typedef basic_obj_contents<double, wchar_t> dwobj_dcontents;
-
-typedef basic_obj_parser<char> obj_parser;
-typedef basic_obj_parser<wchar_t> wobj_parser;
-
-typedef basic_parser_extra<float, char> parser_extra;
-typedef basic_parser_extra<float, wchar_t> wparser_extra;
-
-typedef basic_parser_extra<double, char> dparser_extra;
-typedef basic_parser_extra<double, wchar_t> dwparser_extra;
-
-
 } /* namespace detail */
 } /* namespace obj_parser */
 } /* namespace arl */

Modified: brlcad/trunk/src/libgcv/wfobj/obj_rules.ll
===================================================================
--- brlcad/trunk/src/libgcv/wfobj/obj_rules.ll  2011-08-11 11:14:44 UTC (rev 
45923)
+++ brlcad/trunk/src/libgcv/wfobj/obj_rules.ll  2011-08-11 14:19:39 UTC (rev 
45924)
@@ -78,9 +78,9 @@
  *  convenience routines
  */
 template<typename T>
-inline static parser_extra::parser_state_type &get_state(T scanner)
+inline static objCombinedState::parser_state_type &get_state(T scanner)
 {
-    return static_cast<parser_extra*>(scanner)->parser_state;
+    return static_cast<objCombinedState*>(scanner)->parser_state;
 }
 
 /**


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

------------------------------------------------------------------------------
Get a FREE DOWNLOAD! and learn more about uberSVN rich system, 
user administration capabilities and model configuration. Take 
the hassle out of deploying and managing Subversion and the 
tools developers use with it. 
http://p.sf.net/sfu/wandisco-dev2dev
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits

Reply via email to