view src/objid.h @ 109:f05330267c66

Use stdint types.
author Matti Hamalainen <ccr@tnsp.org>
date Mon, 06 Oct 2014 12:59:23 +0300
parents a68786b9c74b
children
line wrap: on
line source

/*
 *        objid.h - object identity class
 *        AYM 2000-11-06
 */


/*
This file is part of Atclib.

Atclib is Copyright © 1995-1999 André Majorel.

This library is free software; you can redistribute it and/or modify it under
the terms of the GNU Library General Public License as published by the Free
Software Foundation; either version 2 of the License, or (at your option) any
later version.

This library is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more
details.

You should have received a copy of the GNU Library General Public License
along with this library; if not, write to the Free Software Foundation, Inc.,
59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*/


#ifndef YH_OBJID                /* DO NOT INSERT ANYTHING BEFORE THIS LINE */
#define YH_OBJID


// FIXME turn those #defines to consts
// FIXME there is an ambiguity in this class. Does canvas count
// as an object or not ? The issue could use some thought.

// Object types
#define OBJ_NONE        0
#define OBJ_THINGS        1
#define OBJ_LINEDEFS        2
#define OBJ_SIDEDEFS        3
#define OBJ_VERTICES        4
#define OBJ_SEGS        5
#define OBJ_SSECTORS        6
#define OBJ_NODES        7
#define OBJ_SECTORS        8
#define OBJ_REJECT        9
#define OBJ_BLOCKMAP        10
#define OBJ_ANY                11

// Special object numbers
typedef int16_t obj_no_t;
typedef char obj_type_t;
#define OBJ_NO_NONE    -1
#define OBJ_NO_CANVAS  -2
#define is_obj(n)      ((n) >= 0)
#define is_linedef(n)  ((n) >= 0 && (n) < NumLineDefs)
#define is_sector(n)   ((n) >= 0 && (n) < NumSectors )
#define is_sidedef(n)  ((n) >= 0 && (n) < NumSideDefs)
#define is_thing(n)    ((n) >= 0 && (n) < NumThings  )
#define is_vertex(n)   ((n) >= 0 && (n) < NumVertices)

class Objid
{
    public: Objid()
    {
        num = -1;
        type = OBJ_NONE;
    }
    Objid(obj_type_t t, obj_no_t n)
    {
        type = t;
        num = n;
    }
    bool operator==(const Objid & other) const
    {
        return other.type == type && other.num == num;
    }
    bool _is_linedef() const
    {
        return type == OBJ_LINEDEFS && num >= 0;
    }
    bool _is_sector() const
    {
        return type == OBJ_SECTORS && num >= 0;
    }
    bool _is_thing() const
    {
        return type == OBJ_THINGS && num >= 0;
    }
    bool _is_vertex() const
    {
        return type == OBJ_VERTICES && num >= 0;
    }
    bool is_nil() const
    {
        return num < 0 || type == OBJ_NONE;
    }
    bool operator() () const
    {
        return num >= 0 && type != OBJ_NONE;
    }
    void nil()
    {
        num = -1;
        type = OBJ_NONE;
    }
    obj_type_t type;
    obj_no_t num;
};


#endif /* DO NOT ADD ANYTHING AFTER THIS LINE */