C++ stuff sorted out.
This commit is contained in:
parent
54be01d113
commit
dad664f245
|
@ -22,4 +22,5 @@ missing
|
||||||
# build artifacts
|
# build artifacts
|
||||||
src/*.o
|
src/*.o
|
||||||
src/ch??ex??
|
src/ch??ex??
|
||||||
|
src/*.la
|
||||||
|
|
||||||
|
|
|
@ -3,14 +3,9 @@ AM_CPPFLAGS += -Wwrite-strings -Wmissing-declarations -Wno-long-long -Werror
|
||||||
AM_CPPFLAGS += -Wunused-variable -std=c++14 -D_XOPEN_SOURCE -O0 -g -I.
|
AM_CPPFLAGS += -Wunused-variable -std=c++14 -D_XOPEN_SOURCE -O0 -g -I.
|
||||||
AM_CPPFLAGS += -fno-elide-constructors -Weffc++
|
AM_CPPFLAGS += -fno-elide-constructors -Weffc++
|
||||||
|
|
||||||
lib_LTLIBRARIES := libods.la
|
|
||||||
libods_la_SOURCES := simplist.cc
|
|
||||||
libods_la_CPPFLAGS := $(AM_CPPFLAGS)
|
|
||||||
|
|
||||||
bin_PROGRAMS := ch01ex01 ch01ex03 ch01ex04 ch01ex05 ch01ex06
|
bin_PROGRAMS := ch01ex01 ch01ex03 ch01ex04 ch01ex05 ch01ex06
|
||||||
ch01ex01_SOURCES := ch01ex01.cc
|
ch01ex01_SOURCES := ch01ex01.cc
|
||||||
ch01ex03_SOURCES := ch01ex03.cc
|
ch01ex03_SOURCES := ch01ex03.cc
|
||||||
ch01ex04_SOURCES := ch01ex04.cc
|
ch01ex04_SOURCES := ch01ex04.cc
|
||||||
ch01ex05_SOURCES := ch01ex05.cc
|
ch01ex05_SOURCES := ch01ex05.cc
|
||||||
ch01ex06_SOURCES := ch01ex06.cc
|
ch01ex06_SOURCES := ch01ex06.cc
|
||||||
ch01ex06_LDADD := .libs/libods.a
|
|
|
@ -1,8 +1,7 @@
|
||||||
#ifndef __ODS_LIST__
|
#ifndef __ODS_ODS_LIST__
|
||||||
#define __ODS_LIST__
|
#define __ODS_ODS_LIST__
|
||||||
|
|
||||||
|
#include <cstdlib>
|
||||||
#include <cstddef>
|
|
||||||
|
|
||||||
namespace ods {
|
namespace ods {
|
||||||
|
|
||||||
|
@ -10,11 +9,12 @@ namespace ods {
|
||||||
template<typename T>
|
template<typename T>
|
||||||
class List {
|
class List {
|
||||||
public:
|
public:
|
||||||
virtual std::size_t size(void);
|
virtual ~List(void) {};
|
||||||
virtual T get(std::size_t);
|
virtual std::size_t size(void) =0;
|
||||||
virtual T set(std::size_t, T);
|
virtual T get(std::size_t) =0;
|
||||||
virtual void add(std::size_t, T);
|
virtual T set(std::size_t, T) =0;
|
||||||
virtual T remove(std::size_t);
|
virtual void add(std::size_t, T) =0;
|
||||||
|
virtual T remove(std::size_t) =0;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // end namespace ods
|
} // end namespace ods
|
||||||
|
|
|
@ -1,15 +1,18 @@
|
||||||
#ifndef __ODS_SIMPLIST__
|
#ifndef __ODS_ODS_SIMPLIST__
|
||||||
#define __ODS_SIMPLIST__
|
#define __ODS_ODS_SIMPLIST__
|
||||||
|
|
||||||
#include <ods/list.h>
|
#include <ods/list.h>
|
||||||
#include <cstddef>
|
#include <cassert>
|
||||||
|
#include <cstdlib>
|
||||||
|
#include <stdexcept>
|
||||||
|
|
||||||
namespace ods {
|
namespace ods {
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
class SimpList {
|
class SimpList : List<T> {
|
||||||
public:
|
public:
|
||||||
SimpList();
|
SimpList();
|
||||||
|
~SimpList(void);
|
||||||
std::size_t size(void);
|
std::size_t size(void);
|
||||||
T get(std::size_t);
|
T get(std::size_t);
|
||||||
T set(std::size_t, T);
|
T set(std::size_t, T);
|
||||||
|
@ -19,7 +22,86 @@ private:
|
||||||
T *arr;
|
T *arr;
|
||||||
std::size_t cap;
|
std::size_t cap;
|
||||||
std::size_t len;
|
std::size_t len;
|
||||||
|
|
||||||
|
const std::size_t DEFAULT_SIZE = 8;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
SimpList<T>::SimpList()
|
||||||
|
{
|
||||||
|
arr = new T[DEFAULT_SIZE];
|
||||||
|
cap = DEFAULT_SIZE;
|
||||||
|
len = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
SimpList<T>::~SimpList()
|
||||||
|
{
|
||||||
|
delete this->arr;
|
||||||
|
this->cap = 0;
|
||||||
|
this->len = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
std::size_t
|
||||||
|
SimpList<T>::size(void)
|
||||||
|
{
|
||||||
|
assert(len <= cap);
|
||||||
|
return this->len;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
T
|
||||||
|
SimpList<T>::get(std::size_t i)
|
||||||
|
{
|
||||||
|
if (i >= this->len) {
|
||||||
|
throw std::invalid_argument("index out of range");
|
||||||
|
}
|
||||||
|
|
||||||
|
return this->arr[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
T
|
||||||
|
SimpList<T>::set(std::size_t i, T value)
|
||||||
|
{
|
||||||
|
if (i >= this->len) {
|
||||||
|
throw std::invalid_argument("index out of range");
|
||||||
|
}
|
||||||
|
// check size, grow as needed
|
||||||
|
// simple case: check append
|
||||||
|
// complex case: insertion
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
void
|
||||||
|
SimpList<T>::add(std::size_t i, T value)
|
||||||
|
{
|
||||||
|
if (i >= this->len) {
|
||||||
|
throw std::invalid_argument("index out of range");
|
||||||
|
}
|
||||||
|
assert(value);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
T
|
||||||
|
SimpList<T>::remove(std::size_t i)
|
||||||
|
{
|
||||||
|
if (i >= this->len) {
|
||||||
|
throw std::invalid_argument("index out of range");
|
||||||
|
}
|
||||||
|
|
||||||
|
return this->arr[i];
|
||||||
|
}
|
||||||
|
|
||||||
} // end namespace ods
|
} // end namespace ods
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -10,9 +10,9 @@ namespace ods {
|
||||||
template<typename T>
|
template<typename T>
|
||||||
SimpList<T>::SimpList()
|
SimpList<T>::SimpList()
|
||||||
{
|
{
|
||||||
this->arr = new T[DEFAULT_SIZE];
|
arr = new T[DEFAULT_SIZE];
|
||||||
this->cap = 0;
|
cap = 0;
|
||||||
this->len = 0;
|
len = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@ std::size_t
|
||||||
SimpList<T>::size(void)
|
SimpList<T>::size(void)
|
||||||
{
|
{
|
||||||
assert(len <= cap);
|
assert(len <= cap);
|
||||||
return this->len();
|
return this->len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -29,22 +29,31 @@ template <typename T>
|
||||||
T
|
T
|
||||||
SimpList<T>::get(std::size_t i)
|
SimpList<T>::get(std::size_t i)
|
||||||
{
|
{
|
||||||
i = 0;
|
if (i >= this->len) {
|
||||||
throw std::invalid_argument("invalid argument");
|
throw std::invalid_argument("index out of range");
|
||||||
|
}
|
||||||
|
|
||||||
|
return this->arr[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
T
|
T
|
||||||
SimpList<T>::set(std::size_t, T)
|
SimpList<T>::set(std::size_t i, T value)
|
||||||
{
|
{
|
||||||
throw std::invalid_argument("invalid argument");
|
if (i >= this->len) {
|
||||||
|
throw std::invalid_argument("index out of range");
|
||||||
|
}
|
||||||
|
// check size, grow as needed
|
||||||
|
// simple case: check append
|
||||||
|
// complex case: insertion
|
||||||
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
void
|
void
|
||||||
SimpList<T>::add(std::size_t, T)
|
SimpList<T>::add(std::size_t i, T value)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -52,9 +61,13 @@ SimpList<T>::add(std::size_t, T)
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
T
|
T
|
||||||
SimpList<T>::remove(std::size_t)
|
SimpList<T>::remove(std::size_t i)
|
||||||
{
|
{
|
||||||
throw std::invalid_argument("invalid argument");
|
if (i >= this->len) {
|
||||||
|
throw std::invalid_argument("index out of range");
|
||||||
|
}
|
||||||
|
|
||||||
|
return this->arr[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
} // end namespace ods
|
} // end namespace ods
|
||||||
|
|
Loading…
Reference in New Issue