Skip to content
Snippets Groups Projects
Commit 6c917608 authored by Giovanni La Mura's avatar Giovanni La Mura
Browse files

Adopt homogeneous doxygen format

parent 0618d629
No related branches found
No related tags found
No related merge requests found
/*! \file List.h
*/
#ifndef LIST_OUT_OF_BOUNDS_EXCEPTION #ifndef LIST_OUT_OF_BOUNDS_EXCEPTION
#define LIST_OUT_OF_BOUNDS_EXCEPTION 1 #define LIST_OUT_OF_BOUNDS_EXCEPTION 1
#endif #endif
...@@ -19,16 +22,18 @@ ...@@ -19,16 +22,18 @@
template<class T> class List { template<class T> class List {
protected: protected:
int size; //!< Size of the List. int size; //!< Size of the List.
struct element {T value; element* p_prev;}; //!< List element connector. struct element {
T value; //!< Value of the list element.
element* p_prev; //!< Pointer to the previous element in the list.
}; //!< List element connector.
element *current, //!< Pointer to element affected by last operation. element *current, //!< Pointer to element affected by last operation.
*first, //!< Pointer to the first element in the List. *first, //!< Pointer to the first element in the List.
*last; //!< Pointer to the last element in the List. *last; //!< Pointer to the last element in the List.
public: public:
/*! \fn List(int) /*! \brief List constructor.
* \brief List constructor.
* *
* Use the constructor List<T>(SIZE) to create a new list with a given * Use the constructor List<T>([int length]) to create a new list with a given
* size. If the required size is not known in advance, it is recommended * size. If the required size is not known in advance, it is recommended
* to create a List with SIZE=1 (this is the default behavior) and then * to create a List with SIZE=1 (this is the default behavior) and then
* to append the elements dynamically, using List.append(ELEMENT) (where * to append the elements dynamically, using List.append(ELEMENT) (where
...@@ -40,6 +45,8 @@ template<class T> class List { ...@@ -40,6 +45,8 @@ template<class T> class List {
* a = List<int>(1); * a = List<int>(1);
* *
* b = List<int>(); * b = List<int>();
*
* \param length: `int` The size of the list to be constructed [OPTIONAL, default=1].
*/ */
List(int length = 1) { List(int length = 1) {
size = length; size = length;
...@@ -65,8 +72,7 @@ template<class T> class List { ...@@ -65,8 +72,7 @@ template<class T> class List {
} }
} }
/*! \fn append(T) /*! \brief Append an element at the end of the list.
* \brief Append an element at the end of the list.
* *
* To dynamically create a list whose size is not known in advance, * To dynamically create a list whose size is not known in advance,
* elements can be appended in an iterative way. Note that element * elements can be appended in an iterative way. Note that element
...@@ -74,6 +80,8 @@ template<class T> class List { ...@@ -74,6 +80,8 @@ template<class T> class List {
* object. For this reason, after the List has been created, it is * object. For this reason, after the List has been created, it is
* strongly advised to convert it to a C array by calling the function * strongly advised to convert it to a C array by calling the function
* List.to_array(). * List.to_array().
*
* \param value: `T` The value of the element to be appended.
*/ */
void append(T value) { void append(T value) {
element *p_prev = last; element *p_prev = last;
...@@ -84,14 +92,14 @@ template<class T> class List { ...@@ -84,14 +92,14 @@ template<class T> class List {
size++; size++;
} }
/*! \fn get(int) /*! \brief Get the element at given index.
* \brief Get the element at given index.
* *
* Get the element specified by the index argument. The first element * Get the element specified by the index argument. The first element
* has index 0 and the last one has index [size - 1]. * has index 0 and the last one has index [size - 1].
* *
* \return T: the value of the element at the requested position. * \param index: `int` The index of the element to be retrieved. 0 for first.
* \throw LIST_OUT_OF_BOUNDS_EXCEPTION: raised if the index is out of bounds. * \return value `T` The value of the element at the requested position.
* \throws LIST_OUT_OF_BOUNDS_EXCEPTION: Raised if the index is out of bounds.
*/ */
T get(int index) { T get(int index) {
if (index < 0 || index > size - 1) { if (index < 0 || index > size - 1) {
...@@ -102,24 +110,24 @@ template<class T> class List { ...@@ -102,24 +110,24 @@ template<class T> class List {
return current->value; return current->value;
} }
/*! \fn length() /*! \brief Get the number of elements in the list.
* \brief Get the number of elements in the list.
* *
* Get the number of elements currently stored in the list. * Get the number of elements currently stored in the list.
* *
* \return int: the size of the list. * \return size `int` The size of the list.
*/ */
int length() { int length() {
return size; return size;
} }
/*! \fn set(int, T) /*! \brief Set an element by index and value.
* \brief Set an element by index and value.
* *
* Set the element at the position specified by the index to the value * Set the element at the position specified by the index to the value
* specified by the value argument. * specified by the value argument.
* *
* \throw LIST_OUT_OF_BOUNDS_EXCEPTION: raised if the index is out of bounds. * \param index: `int` The index of the element to be set. 0 for first.
* \param value: `int` The value to store in the pointed element.
* \throws LIST_OUT_OF_BOUNDS_EXCEPTION: Raised if the index is out of bounds.
*/ */
void set(int index, T value) { void set(int index, T value) {
if (index < 0 || index > size - 1) { if (index < 0 || index > size - 1) {
...@@ -130,8 +138,7 @@ template<class T> class List { ...@@ -130,8 +138,7 @@ template<class T> class List {
current->value = value; current->value = value;
} }
/*! \fn to_array() /*! \brief Convert the list to a C array.
* \brief Convert the list to a C array.
* *
* The List object is useful to dynamically manage a set of objects * The List object is useful to dynamically manage a set of objects
* when the number of elements is not known in advance. However, the * when the number of elements is not known in advance. However, the
...@@ -142,15 +149,15 @@ template<class T> class List { ...@@ -142,15 +149,15 @@ template<class T> class List {
* a conversion from List to C array, returning a contiguous object, * a conversion from List to C array, returning a contiguous object,
* where indexed access can be used. * where indexed access can be used.
* *
* \return T[size]: a C array of type T and size equal to the List size. * \return array `T*` A C array of type T and size equal to the List size.
*/ */
T* to_array() { T* to_array() {
T *result = new T[size]; T *array = new T[size];
current = last; current = last;
for (int i = size; i > 0; i--) { for (int i = size; i > 0; i--) {
result[i - 1] = current->value; array[i - 1] = current->value;
current = current->p_prev; current = current->p_prev;
} }
return result; return array;
} }
}; };
/*! \brief C++ implementation of EDFB /*! \file edfb.cpp
*
* This code aims at replicating the original work-flow in C++.
*/ */
#include <cstdio> #include <cstdio>
...@@ -13,8 +11,32 @@ ...@@ -13,8 +11,32 @@
using namespace std; using namespace std;
/*! \brief Load a text file as a sequence of strings in memory.
*
* The configuration of the field expansion code in FORTRAN uses
* shared memory access and file I/O operations managed by different
* functions. Although this approach could be theoretically replicated,
* it is more convenient to handle input and output to distinct files
* using specific functions. load_file() helps in the task of handling
* input such as configuration files or text data structures that need
* to be loaded entirely. The function performs a line-by line scan of
* the input file and returns an array of strings that can be later
* parsed and ingested by the concerned code blocks. An optional pointer
* to integer allows the function to keep track of the number of file
* lines that were read, if needed.
*
* \param file_name: `string` The path of the file to be read.
* \param count: `int*` Pointer to an integer recording the number of
* read lines [OPTIONAL, default=NULL].
* \return array_lines `string*` An array of strings, one for each input
* file line.
*/
string *load_file(string file_name, int *count); string *load_file(string file_name, int *count);
/*! \brief C++ implementation of EDFB
*
* This code aims at replicating the original work-flow in C++.
*/
int main(int argc, char **argv) { int main(int argc, char **argv) {
// Common variables set // Common variables set
complex<double> *dc0, ***dc0m; complex<double> *dc0, ***dc0m;
...@@ -23,13 +45,12 @@ int main(int argc, char **argv) { ...@@ -23,13 +45,12 @@ int main(int argc, char **argv) {
double *xiv, *wns, *wls, *pus, *evs, *vss; double *xiv, *wns, *wls, *pus, *evs, *vss;
string vns[5]; string vns[5];
/// A helper variable to set the size of dc0m int max_nsh = 0; // A helper variable to set the size of dc0m
int max_nsh = 0;
int ici; int ici;
// Input file reading section // Input file reading section
int num_lines = 0; int num_lines = 0;
int last_read_line; //!< Keep track of where INXI left the input stream int last_read_line; // Keep track of where INXI left the input stream
string *file_lines = load_file("../../test_data/sphere/DEDFB", &num_lines); string *file_lines = load_file("../../test_data/sphere/DEDFB", &num_lines);
// Configuration code // Configuration code
...@@ -190,25 +211,6 @@ int main(int argc, char **argv) { ...@@ -190,25 +211,6 @@ int main(int argc, char **argv) {
return 0; return 0;
} }
/*! \fn load_file(string, int*)
* \brief Load a text file as a sequence of strings in memory.
*
* The configuration of the field expansion code in FORTRAN uses
* shared memory access and file I/O operations managed by different
* functions. Although this approach could be theoretically replicated,
* it is more convenient to handle input and output to distinct files
* using specific functions. load_file() helps in the task of handling
* input such as configuration files or text data structures that need
* to be loaded entirely. The function performs a line-byline scan of
* the input file and returns an array of strings that can be later
* parsed and ingested by the concerned code blocks. An optional pointer
* to integer allows the function to keep track of the number of file
* lines that were read, if needed.
*
* \param string file_name: The path of the file to be read.
* \param [int *count = NULL]: Pointer to an integer recording the number of lines.
* \return string*: An array of strings, one for each input file line.
*/
string *load_file(string file_name, int *count = 0) { string *load_file(string file_name, int *count = 0) {
fstream input_file(file_name.c_str(), ios::in); fstream input_file(file_name.c_str(), ios::in);
List<string> file_lines = List<string>(); List<string> file_lines = List<string>();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment