Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef __deal2__memory_consumption_h
00013 #define __deal2__memory_consumption_h
00014
00015
00016 #include <deal.II/base/config.h>
00017 #include <deal.II/base/std_cxx1x/shared_ptr.h>
00018
00019 #include <string>
00020 #include <complex>
00021 #include <vector>
00022 #include <cstddef>
00023
00024 DEAL_II_NAMESPACE_OPEN
00025
00026
00083 namespace MemoryConsumption
00084 {
00085
00103 template <typename T>
00104 inline
00105 std::size_t memory_consumption (const T &t);
00106
00112 inline
00113 std::size_t memory_consumption (const bool);
00114
00120 inline
00121 std::size_t memory_consumption (const char);
00122
00128 inline
00129 std::size_t memory_consumption (const short int);
00130
00136 inline
00137 std::size_t memory_consumption (const short unsigned int);
00138
00144 inline
00145 std::size_t memory_consumption (const int);
00146
00152 inline
00153 std::size_t memory_consumption (const unsigned int);
00154
00160 inline
00161 std::size_t memory_consumption (const float);
00162
00168 inline
00169 std::size_t memory_consumption (const double);
00170
00176 inline
00177 std::size_t memory_consumption (const long double);
00178
00184 template <typename T>
00185 inline
00186 std::size_t memory_consumption (const std::complex<T> &);
00187
00194 inline
00195 std::size_t memory_consumption (const std::string &s);
00196
00247 template <typename T>
00248 inline
00249 std::size_t memory_consumption (const std::vector<T> &v);
00250
00266 template <typename T, int N>
00267 inline
00268 std::size_t memory_consumption (const T (&v)[N]);
00269
00281 inline
00282 std::size_t memory_consumption (const std::vector<bool> &v);
00283
00290 inline
00291 std::size_t memory_consumption (const std::vector<int> &v);
00292
00299 inline
00300 std::size_t memory_consumption (const std::vector<double> &v);
00301
00308 inline
00309 std::size_t memory_consumption (const std::vector<float> &v);
00310
00317 inline
00318 std::size_t memory_consumption (const std::vector<char> &v);
00319
00326 inline
00327 std::size_t memory_consumption (const std::vector<unsigned char> &v);
00328
00335 template <typename T>
00336 inline
00337 std::size_t memory_consumption (const std::vector<T *> &v);
00338
00352 std::size_t memory_consumption (const std::vector<std::string> &v);
00353
00354
00360 template <typename A, typename B>
00361 inline
00362 std::size_t memory_consumption (const std::pair<A,B> &p);
00363
00372 template <typename T>
00373 inline
00374 std::size_t memory_consumption (const T * const);
00375
00384 template <typename T>
00385 inline
00386 std::size_t memory_consumption (T * const);
00387
00403 inline
00404 std::size_t memory_consumption (void * const);
00405
00414 template <typename T>
00415 inline
00416 std::size_t memory_consumption (const std_cxx1x::shared_ptr<T> &);
00417 }
00418
00419
00420
00421
00422
00423 namespace MemoryConsumption
00424 {
00425 inline
00426 std::size_t memory_consumption (const bool)
00427 {
00428 return sizeof(bool);
00429 }
00430
00431
00432
00433 inline
00434 std::size_t memory_consumption (const char)
00435 {
00436 return sizeof(char);
00437 }
00438
00439
00440
00441 inline
00442 std::size_t memory_consumption (const short int)
00443 {
00444 return sizeof(short int);
00445 }
00446
00447
00448
00449 inline
00450 std::size_t memory_consumption (const short unsigned int)
00451 {
00452 return sizeof(short unsigned int);
00453 }
00454
00455
00456
00457 inline
00458 std::size_t memory_consumption (const int)
00459 {
00460 return sizeof(int);
00461 }
00462
00463
00464
00465 inline
00466 std::size_t memory_consumption (const unsigned int)
00467 {
00468 return sizeof(unsigned int);
00469 }
00470
00471
00472
00473 inline
00474 std::size_t memory_consumption (const float)
00475 {
00476 return sizeof(float);
00477 }
00478
00479
00480
00481 inline
00482 std::size_t memory_consumption (const double)
00483 {
00484 return sizeof(double);
00485 }
00486
00487
00488
00489 inline
00490 std::size_t memory_consumption (const long double)
00491 {
00492 return sizeof(long double);
00493 }
00494
00495
00496 template <typename T>
00497 inline
00498 std::size_t memory_consumption (const std::complex<T> &)
00499 {
00500 return sizeof(std::complex<T>);
00501 }
00502
00503
00504
00505 inline
00506 std::size_t memory_consumption (const std::string &s)
00507 {
00508 return sizeof(s) + s.length();
00509 }
00510
00511
00512
00513 template <typename T>
00514 std::size_t memory_consumption (const std::vector<T> &v)
00515 {
00516 std::size_t mem = sizeof(std::vector<T>);
00517 const unsigned int n = v.size();
00518 for (unsigned int i=0; i<n; ++i)
00519 mem += memory_consumption(v[i]);
00520 mem += (v.capacity() - n)*sizeof(T);
00521 return mem;
00522 }
00523
00524
00525
00526 template <typename T, int N>
00527 std::size_t memory_consumption (const T (&v)[N])
00528 {
00529 std::size_t mem = 0;
00530 for (unsigned int i=0; i<N; ++i)
00531 mem += memory_consumption(v[i]);
00532 return mem;
00533 }
00534
00535
00536
00537 inline
00538 std::size_t memory_consumption (const std::vector<bool> &v)
00539 {
00540 return v.capacity() / 8 + sizeof(v);
00541 }
00542
00543
00544
00545 inline
00546 std::size_t memory_consumption (const std::vector<int> &v)
00547 {
00548 return (v.capacity() * sizeof(int) +
00549 sizeof(v));
00550 }
00551
00552
00553
00554 inline
00555 std::size_t memory_consumption (const std::vector<double> &v)
00556 {
00557 return (v.capacity() * sizeof(double) +
00558 sizeof(v));
00559 }
00560
00561
00562
00563 inline
00564 std::size_t memory_consumption (const std::vector<float> &v)
00565 {
00566 return (v.capacity() * sizeof(float) +
00567 sizeof(v));
00568 }
00569
00570
00571
00572 inline
00573 std::size_t memory_consumption (const std::vector<char> &v)
00574 {
00575 return (v.capacity() * sizeof(char) +
00576 sizeof(v));
00577 }
00578
00579
00580
00581 inline
00582 std::size_t memory_consumption (const std::vector<unsigned char> &v)
00583 {
00584 return (v.capacity() * sizeof(unsigned char) +
00585 sizeof(v));
00586 }
00587
00588
00589
00590 template <typename T>
00591 inline
00592 std::size_t memory_consumption (const std::vector<T *> &v)
00593 {
00594 return (v.capacity() * sizeof(T *) +
00595 sizeof(v));
00596 }
00597
00598
00599
00600 template <typename A, typename B>
00601 inline
00602 std::size_t memory_consumption (const std::pair<A,B> &p)
00603 {
00604 return (memory_consumption(p.first) +
00605 memory_consumption(p.second));
00606 }
00607
00608
00609
00610 template <typename T>
00611 inline
00612 std::size_t
00613 memory_consumption (const T * const)
00614 {
00615 return sizeof(T*);
00616 }
00617
00618
00619
00620 template <typename T>
00621 inline
00622 std::size_t
00623 memory_consumption (T * const)
00624 {
00625 return sizeof(T*);
00626 }
00627
00628
00629
00630 inline
00631 std::size_t
00632 memory_consumption (void * const)
00633 {
00634 return sizeof(void*);
00635 }
00636
00637
00638
00639 template <typename T>
00640 inline
00641 std::size_t
00642 memory_consumption (const std_cxx1x::shared_ptr<T> &)
00643 {
00644 return sizeof(std_cxx1x::shared_ptr<T>);
00645 }
00646
00647
00648
00649 template <typename T>
00650 inline
00651 std::size_t
00652 memory_consumption (const T &t)
00653 {
00654 return t.memory_consumption();
00655 }
00656 }
00657
00658 DEAL_II_NAMESPACE_CLOSE
00659
00660 #endif
00661