]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Use std::uint8_t as the underlying data type for CellId. 5905/head
authorWolfgang Bangerth <bangerth@colostate.edu>
Wed, 14 Feb 2018 00:45:48 +0000 (17:45 -0700)
committerWolfgang Bangerth <bangerth@colostate.edu>
Thu, 15 Feb 2018 19:22:50 +0000 (12:22 -0700)
include/deal.II/grid/cell_id.h
source/grid/cell_id.cc

index cc62c5b793eaeb01963ab8d9af7a6d97898345cc..48a04cb7972f3e525c5ca94718c72aeb590d57a6 100644 (file)
@@ -22,6 +22,7 @@
 #include <array>
 #include <vector>
 #include <iostream>
+#include <cstdint>
 
 #ifdef DEAL_II_WITH_P4EST
 #include <deal.II/distributed/p4est_wrappers.h>
@@ -76,10 +77,11 @@ public:
    * each entry denotes which child to pick from one refinement level to the
    * next, starting with the coarse cell, until we get to the cell represented
    * by the current object. Therefore, each entry should be a number between 0
-   * and the number of children of a cell in the current space dimension.
+   * and the number of children of a cell in the current space dimension (i.e.,
+   * GeometryInfo<dim>::max_children_per_cell).
    */
   CellId(const unsigned int coarse_cell_id,
-         const std::vector<unsigned char> &child_indices);
+         const std::vector<std::uint8_t> &child_indices);
 
   /**
    * Construct a CellId object with a given @p coarse_cell_id and array of
@@ -88,12 +90,13 @@ public:
    * each entry denotes which child to pick from one refinement level to the
    * next, starting with the coarse cell, until we get to the cell represented
    * by the current object. Therefore, each entry should be a number between 0
-   * and the number of children of a cell in the current space dimension.
-   * @p child_indices shall have at least @p n_child_indices valid entries.
+   * and the number of children of a cell in the current space dimension (i.e.,
+   * GeometryInfo<dim>::max_children_per_cell). The array
+   * @p child_indices must have at least @p n_child_indices valid entries.
    */
-  CellId(const unsigned int coarse_cell_id,
-         const unsigned int n_child_indices,
-         const unsigned char *child_indices);
+  CellId(const unsigned int  coarse_cell_id,
+         const unsigned int  n_child_indices,
+         const std::uint8_t *child_indices);
 
   /**
    * Construct a CellId object with a given binary representation that was
@@ -170,9 +173,9 @@ private:
    * the array can be extended.
    */
 #ifdef DEAL_II_WITH_P4EST
-  std::array<char,internal::p4est::functions<2>::max_level> child_indices;
+  std::array<std::uint8_t,internal::p4est::functions<2>::max_level> child_indices;
 #else
-  std::array<char,30> child_indices;
+  std::array<std::uint8_t,30> child_indices;
 #endif
 
   friend std::istream &operator>> (std::istream &is, CellId &cid);
@@ -192,10 +195,10 @@ std::ostream &operator<< (std::ostream &os,
   os << cid.coarse_cell_id << '_' << cid.n_child_indices << ':';
   for (unsigned int i=0; i<cid.n_child_indices; ++i)
     // write the child indices. because they are between 0 and 2^dim-1, they all
-    // just have one digit, so we could write them as integers. it's
-    // probably clearer to write them as one-digit characters starting
-    // at '0'
-    os << static_cast<unsigned char>(cid.child_indices[i] + '0');
+    // just have one digit, so we could write them as one character
+    // objects. it's probably clearer to write them as one-digit characters
+    // starting at '0'
+    os << static_cast<unsigned char>('0' + cid.child_indices[i]);
   return os;
 }
 
@@ -232,11 +235,11 @@ std::istream &operator>> (std::istream &is,
   is >> dummy;
   Assert(dummy==':', ExcMessage("invalid CellId"));
 
-  char value;
+  unsigned char value;
   for (unsigned int i=0; i<cid.n_child_indices; ++i)
     {
       // read the one-digit child index (as an integer number) and
-      // convert it back into unsigned char
+      // convert it back into unsigned integer type
       is >> value;
       cid.child_indices[i] = value-'0';
     }
index 33736bd4a3615aa92b347ae3939e93345e6eed9a..983ccf9b8afb0d959f7482576ad7f1b93101e2a2 100644 (file)
@@ -38,7 +38,7 @@ CellId::CellId()
 
 
 CellId::CellId(const unsigned int coarse_cell_id,
-               const std::vector<unsigned char> &id)
+               const std::vector<std::uint8_t> &id)
   :
   coarse_cell_id(coarse_cell_id),
   n_child_indices(id.size())
@@ -50,9 +50,9 @@ CellId::CellId(const unsigned int coarse_cell_id,
 
 
 
-CellId::CellId(const unsigned int coarse_cell_id,
-               const unsigned int n_child_indices,
-               const unsigned char *id)
+CellId::CellId(const unsigned int  coarse_cell_id,
+               const unsigned int  n_child_indices,
+               const std::uint8_t *id)
   :
   coarse_cell_id(coarse_cell_id),
   n_child_indices(n_child_indices)

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.