/* * Simulator of microcontrollers (pobjcl.h) * * Copyright (C) 1997,16 Drotos Daniel, Talker Bt. * * To contact author send email to drdani@mazsola.iit.uni-miskolc.hu * */ /* This file is part of microcontroller simulator: ucsim. UCSIM is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. UCSIM 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 General Public License for more details. You should have received a copy of the GNU General Public License along with UCSIM; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*@1@*/ #ifndef POBJ_HEADER #define POBJ_HEADER #include "ddconfig.h" #include "pobjt.h" #include "eventcl.h" #include "charscl.h" /* # ==========================================================================# cl_base # ==========================================================================# # */ class cl_abs_base { }; class cl_list; class cl_event; class cl_base: public cl_abs_base { private: /*const char * */chars name; class cl_base *parent; class cl_list *children; public: cl_base(void); virtual ~cl_base(void); virtual int init(void); virtual const char *get_name(void) { return(name); } virtual const char *get_name(const char *def); virtual bool have_name(void) { return/*(name != 0)*/ !name.is_null(); } virtual bool have_real_name(void) { return/*(name != 0 && *name != '\0')*/ !name.empty(); } const char *set_name(const char *new_name); const char *set_name(const char *new_name, const char *def_name); bool is_named(const char *the_name); bool is_inamed(const char *the_name); class cl_base *get_parent(void) { return(parent); } int nuof_children(void); virtual void add_child(class cl_base *child); virtual void remove_child(class cl_base *child); virtual void remove_from_chain(void); virtual void unlink(void); virtual class cl_base *first_child(void); virtual class cl_base *next_child(class cl_base *child); virtual bool handle_event(class cl_event &event); virtual bool pass_event_down(class cl_event &event); }; /* * Event */ class cl_event: public cl_base { protected: bool handled; public: enum event what; public: cl_event(enum event what_event); virtual ~cl_event(void); bool is_handled(void) { return(handled); } virtual void handle(void) { handled= true; } }; /* # ==========================================================================# cl_list # ==========================================================================# # */ class cl_list: public cl_base { public: t_index count; protected: void **Items; t_index Limit; t_index Delta; public: cl_list(t_index alimit, t_index adelta, char *aname); cl_list(t_index alimit, t_index adelta, const char *aname); virtual ~cl_list(void); inline void *at(t_index index) { if (index < 0 || index >= count) error(1, index); return (Items[index]); } class cl_base *object_at(t_index index); virtual t_index index_of(void *item); virtual bool index_of(void *item, t_index *idx); virtual void *next(void *item); int get_count(void); virtual void *pop(void); virtual void *top(void); //void pack(void); virtual void set_limit(t_index alimit); void free_at(t_index index); void free_all(void); void disconn_at(t_index index); void disconn(void *item); void disconn_all(void); void add_at(t_index index, void *item); void put_at(t_index index, void *item); virtual t_index add(void *item); virtual t_index add(class cl_base *item, class cl_base *parent); virtual void push(void *item); void *first_that(match_func test, void *arg); void *last_that(match_func test, void *arg); void for_each(iterator_func action, void *arg); void error(t_index code, t_index info); private: virtual void free_item(void *item); }; /* # ==========================================================================# cl_sorted_list # ==========================================================================# # */ class cl_sorted_list: public cl_list { public: bool Duplicates; public: cl_sorted_list(t_index alimit, t_index adelta, char *aname); cl_sorted_list(t_index alimit, t_index adelta, const char *aname); virtual ~cl_sorted_list(void); virtual bool search(void *key, t_index& index); virtual t_index index_of(void *item); virtual t_index add(void *item); virtual void *key_of(void *item); private: virtual int compare(void *key1, void *key2)= 0; }; /* # ==========================================================================# cl_strings # ==========================================================================# # */ class cl_strings: public cl_sorted_list { public: cl_strings(t_index alimit, t_index adelta, char *aname); cl_strings(t_index alimit, t_index adelta, const char *aname); virtual ~cl_strings(void); private: virtual int compare(void *key1, void *key2); virtual void free_item(void *item); }; /* # ==========================================================================# cl_ustrings # ==========================================================================# # */ class cl_ustrings: public cl_strings { public: cl_ustrings(t_index alimit, t_index adelta, char *aname); cl_ustrings(t_index alimit, t_index adelta, const char *aname); virtual ~cl_ustrings(void); private: virtual int compare(void *key1, void *key2); virtual bool search(void *key, t_index &index); }; #endif /* End of pobj.h */