Changeset 1327


Ignore:
Timestamp:
May 1, 2012, 8:01:42 PM (9 years ago)
Author:
touky
Message:

Added CommandParser parent class to Mesh to prepare other Parser implementation.

Location:
trunk
Files:
1 added
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/orbital/mesh.h

    r1326 r1327  
    1010 */
    1111
     12#include "CommandParser.h"
     13
    1214#if !defined __MESH_H__
    1315#define __MESH_H__
    1416
    15 class Mesh
     17class Mesh : public CommandParser
    1618{
    1719public:
     
    2123    {}
    2224
    23     void SendCommand(char const *command)
     25    virtual void SwitchCommand(char const *&command)
    2426    {
    2527        vec4 v4;
     
    2729        float f1, f2, f3, f4, f5, f6, f7, f8;
    2830
    29         for (char const *p = command; p && *p; )
    30         {
    31 #define CASE(str) if (!strncmp(p, str, strlen(str)) \
    32                        && (p[strlen(str)] < 'a' || p[strlen(str)] > 'z') \
    33                        && (p += strlen(str)))
     31                const char *&p = command;
     32        {
     33#define CASE(str) if (CheckCommand(str, p))
    3434                 CASE("scb") { p = GetArg(p, v4); SetCurColor2(v4); }
    3535            else CASE("sc")  { p = GetArg(p, v4); SetCurColor(v4); }
     
    6666            else CASE("frb") { /* TODO */ }
    6767#undef CASE
    68 
    69             /* Skip all remaining letters */
    70             while (*p && *p >= 'a' && *p <= 'z')
    71                 p++;
    72             /* ... and skip everything until next letter */
    73             while (*p && (*p < 'a' || *p > 'z'))
    74                 p++;
    75         }
    76     }
    77 
    78     static char const *GetArg(char const *p, float &f)
    79     {
    80         float sign = 1.0f;
    81         f = 0.0f;
    82         /* 1) Skip commas until the first valid character, 2) read all
    83          * the minus signs, 3) read all the digits, 4) skip all the dots,
    84          * if any, 5) read all the remaining digits, if any. */
    85         for ( ; *p == ','; p++)
    86             ;
    87         for ( ; *p == '-'; p++)
    88             sign = -sign;
    89         for ( ; *p >= '0' && *p <= '9'; p++)
    90             f = f * 10.f + (*p - '0');
    91         for ( ; *p == '.'; p++)
    92             ;
    93         for (float div = 10.f; *p >= '0' && *p <= '9'; div *= 10.f)
    94             f += (*p++ - '0') / div;
    95         f *= sign;
    96         return p;
    97     }
    98 
    99     static char const *GetArg(char const *p, float &f1, float &f2)
    100     {
    101         return GetArg(GetArg(p, f1), f2);
    102     }
    103 
    104     static char const *GetArg(char const *p, float &f1, float &f2, float &f3)
    105     {
    106         return GetArg(GetArg(p, f1, f2), f3);
    107     }
    108 
    109     static char const *GetArg(char const *p, float &f1, float &f2,
    110                                              float &f3, float &f4)
    111     {
    112         return GetArg(GetArg(p, f1, f2, f3), f4);
    113     }
    114 
    115     static char const *GetArg(char const *p, float &f1, float &f2, float &f3,
    116                                              float &f4, float &f5)
    117     {
    118         return GetArg(GetArg(p, f1, f2, f3, f4), f5);
    119     }
    120 
    121     static char const *GetArg(char const *p, vec3 &v)
    122     {
    123         return GetArg(p, v.x, v.y, v.z);
    124     }
    125 
    126     static char const *GetArg(char const *p, vec3 &v, float &f)
    127     {
    128         return GetArg(p, v.x, v.y, v.z, f);
    129     }
    130 
    131     static char const *GetArg(char const *p, vec4 &v)
    132     {
    133         return GetArg(p, v.x, v.y, v.z, v.w);
    134     }
    135 
    136     void Flush()
     68        }
     69    }
     70
     71    virtual void Flush()
    13772    {
    13873        m_vert_cursor = m_vert.Count();
  • trunk/win32/orbital.vcxproj

    r1307 r1327  
    2828  </ItemGroup>
    2929  <ItemGroup>
     30    <ClInclude Include="..\orbital\CommandParser.h" />
    3031    <ClInclude Include="..\orbital\mesh.h" />
    3132    <ClInclude Include="..\orbital\orbital.h" />
  • trunk/win32/orbital.vcxproj.filters

    r1307 r1327  
    33  <ItemGroup>
    44    <ClInclude Include="..\orbital\mesh.h" />
     5    <ClInclude Include="..\orbital\CommandParser.h" />
    56  </ItemGroup>
    67  <ItemGroup>
Note: See TracChangeset for help on using the changeset viewer.