diff options
Diffstat (limited to 'Examples/ruby/free_function/example.cxx')
-rw-r--r-- | Examples/ruby/free_function/example.cxx | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/Examples/ruby/free_function/example.cxx b/Examples/ruby/free_function/example.cxx new file mode 100644 index 0000000..402a947 --- /dev/null +++ b/Examples/ruby/free_function/example.cxx @@ -0,0 +1,67 @@ +#include "example.h" + +Animal::Animal(const char* name) : name_(name) +{ +} + +Animal::~Animal() +{ +} + +/* Return the animal's name */ +const char* Animal::get_name() const +{ + return name_.c_str(); +} + +Zoo::Zoo() +{ +} + +Zoo::~Zoo() +{ + IterType iter = this->animals.begin(); + IterType end = this->animals.end(); + + for(; iter != end; ++iter) + { + Animal* animal = *iter; + delete animal; + } +} + +/* Create a new animal. */ +Animal* Zoo::create_animal(const char* name) +{ + return new Animal(name); +} + +/* Add a new animal to the zoo. */ +void Zoo::add_animal(Animal* animal) +{ + animals.push_back(animal); +} + +Animal* Zoo::remove_animal(size_t i) +{ + /* Note a production implementation should check + for out of range errors. */ + Animal* result = this->animals[i]; + IterType iter = this->animals.begin(); + std::advance(iter, i); + this->animals.erase(iter); + + return result; +} + +/* Return the number of animals in the zoo. */ +size_t Zoo::get_num_animals() const +{ + return animals.size(); +} + +/* Return a pointer to the ith animal */ +Animal* Zoo::get_animal(size_t i) const +{ + return animals[i]; +} |