Program Listing for File quack_field.h

Return to documentation for file (src/quack_field.h)

#include <utility>

#ifndef PROJECT02_QUACK_FIELD_H
#define PROJECT02_QUACK_FIELD_H

#include <utility>
#include <cstring>
#include <assert.h>

#include "container_templates.h"

namespace Quack {
  // Forward declaration
  class Class;

  struct Field {
    struct Container : public MapContainer<Field> {
      const void print_original_src(unsigned int indent_depth) override {
        // Do not implement.  Makes no sense since not needed.
        assert(false);
      }
      void add_by_name(const std::string &name) {
        add(new Field(name));
      }
      bool is_super_set(Container *other) {
        for (const auto &field_info : *other) {
          if (!exists(field_info.first))
            return false;
        }
        return true;
      }
    };
    explicit Field(std::string name) : name_(std::move(name)) { }

    std::string name_;
    Class* type_ = nullptr;
  };
}

#endif //PROJECT02_QUACK_FIELD_H