Visar inlägg med etikett boost. Visa alla inlägg
Visar inlägg med etikett boost. Visa alla inlägg

måndag 1 oktober 2012

SHA1 calculation using boost

Here is how to calculate a SHA1 hash using boost.
/*
  sha1 digest function, using boost.
  By Paul Dreik 20121001 http://www.pauldreik.se/
  License: GPLv2 or later, at your option.
*/
#include <fstream>
#include <iostream>
#include <iomanip>
#include <boost/uuid/sha1.hpp>

int main(int argc, char* argv[]) {
  if(argc<2) {
    std::cerr<<"Supply file name as the first argument.\n";
    return -1;
  }
  
  //open the file
  std::ifstream ifs(argv[1],std::ios::binary);
  
  if(!ifs.good()) {
    std::cerr<<"bad file\n";
    return -2;
  }

  boost::uuids::detail::sha1 sha1;
  unsigned int hash[5];
  char buf[1024];
  while(ifs.good()) {
    ifs.read(buf,sizeof(buf));
    sha1.process_bytes(buf,ifs.gcount());
  }
  if(!ifs.eof()) {
    std::cerr<<"not at eof\n";
    return -3;
  }
  ifs.close();
  sha1.get_digest(hash);
  std::cout<<std::hex<<std::setfill('0')<<std::setw(sizeof(int)*2);
  for(std::size_t i=0; i<sizeof(hash)/sizeof(hash[0]); ++i) {
    std::cout<<hash[i];
  }
  std::cout<<"  "<<argv[1]<<std::endl;
  return 0;
}

fredag 23 december 2011

Använda alla bibliotek från boost

Jag träffade nyligen en c++-utvecklare som precis som jag är en varm anhängare av boost. Han hade använt, med något enstaka undantag, alla boostbibliotek! Jag blev omedelbart imponerad.

Jag går igenom listan själv och konstaterar att jag faktiskt använt 27 av biblioteken i verkliga projekt. Har satt en asterisk framför de jag använt hittills.
Listan finns här för version 1.48 (senaste i skrivande stund). Den innehåller imponerande 111 bibliotek! (en del listas förvissa som flera).

Jag får en viss lust att gå igenom de resterande och skriva ett litet program för var och en av dom. Det får vänta till nån sömnlös natt...
  1. Accumulators
  2. *Any
  3. *Array
  4. *Asio
  5. *Assign
  6. *Bimap
  7. *Bind
  8. Call Traits
  9. Chrono
  10. *Circular Buffer
  11. Compatibility
  12. Compressed Pair
  13. Concept Check
  14. Config
  15. Container
  16. Conversion
  17. *CRC
  18. *Date Time
  19. Disjoint Sets
  20. Dynamic Bitset
  21. Enable If
  22. Exception
  23. *Filesystem
  24. Flyweight
  25. *Foreach
  26. Format
  27. Function
  28. Function Types
  29. Functional
  30. Functional/Factory
  31. Functional/Forward
  32. Functional/Hash
  33. Fusion
  34. Geometry
  35. GIL
  36. *Graph
  37. ICL
  38. In Place Factory, Typed In Place Factory
  39. *Integer
  40. *Interprocess
  41. Interval
  42. Intrusive
  43. *IO State Savers
  44. *Iostreams
  45. Iterators
  46. Lambda
  47. Lexical Cast
  48. Locale
  49. Math
  50. Math Common Factor
  51. Math Octonion
  52. Math Quaternion
  53. Math/Special Functions
  54. Math/Statistical Distributions
  55. Member Function
  56. Meta State Machine
  57. Min-Max
  58. Move
  59. MPI
  60. MPL
  61. Multi-Array
  62. Multi-Index
  63. *Numeric Conversion
  64. Operators
  65. Optional
  66. Parameter
  67. Phoenix
  68. Pointer Container
  69. Polygon
  70. Pool
  71. Preprocessor
  72. *Program Options
  73. *Property Map
  74. *Property Tree
  75. Proto
  76. Python
  77. *Random
  78. Range
  79. Ratio
  80. Rational
  81. *Ref
  82. *Regex
  83. Result Of
  84. Scope Exit
  85. *Serialization
  86. Signals
  87. Signals2
  88. *Smart Ptr
  89. Spirit
  90. Statechart
  91. Static Assert
  92. String Algo
  93. Swap
  94. System
  95. *Test
  96. *Thread
  97. Timer
  98. Tokenizer
  99. TR1
  100. Tribool
  101. *Tuple
  102. Type Traits
  103. Typeof
  104. Units
  105. Unordered
  106. Utility
  107. *Uuid
  108. Value Initialized
  109. Variant
  110. Wave
  111. Xpressive

onsdag 7 oktober 2009

Kompilera boost med visual c++ studio 2008 express

Jag håller just nu på att försöka få igång en applikation jag skrivit i windowsmiljö.
För att kunna köra samma kod på flera plattformar använder jag boost på diverse ställen.
Det är inte helt lätt att använda de bibliotek i boost som inte enbart består av templates. I instruktionerna på boosts hemsida används kommandona bootstrap följt av bjam.
Det fungerade inte för mig.

Efter att ha manuellt ha lagt till pathen till kompilatorprogrammen fungerar det betydligt bättre.
I kontrollpanelen, system, avancerat, miljövariabler lägger jag till variabeln path
;%c:\Program\Microsoft Visual Studio 9.0\VC\bin
som är den sökväg som innehåller filerna cl.exe etc.