Program Listing for File DerivedClass.h

Return to documentation for file (arbitrary/DerivedClass.h)

#pragma once

#include <typeinfo>
#include <iostream>
#include <string>
#include <exception>

#include <arbitrary/BaseClass.h>

NAMESPACE_BEGIN(arbitrary)

enum CAMERA_STATES {
    CAM_NONE      = (1 << 0),
    CAM_ROTATE    = (1 << 1),
    CAM_TRANSLATE = (1 << 2),
    CAM_SCALE     = (1 << 3)
};

template <typename T, unsigned int N>
class DerivedClass : public BaseClass {
public:
    typedef T SuperParent;

    DerivedClass() : BaseClass(N) {}

    virtual ~DerivedClass() {}

    void virtualMethod() {
        std::cout << "    virtualMethod() current index is [" << current_index << "]." << std::endl;
        current_index++;
        if(current_index >= N) current_index = 0;
    }

    bool insertAt(T &item, unsigned int index) {
        if(index >= N) return false;

        items[index] = item;
        return true;
    }

    const T& itemAt(unsigned int index) {
        if(index >= N) throw std::runtime_error("Invalid index.");
        else return items[index];
    }

protected:
    T items[N];

    unsigned int current_index = 0;
};

template <unsigned int N>
class DerivedClass<arbitrary::arbitrary_struct, N> : public BaseClass {};

template <>
class DerivedClass<bool, 2> : public BaseClass {};

NAMESPACE_END(arbitrary)