00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include <climits>
00027 #include <iterator>
00028 #include <mpcl/system/system.hh>
00029 #include <mpcl/text/string.hh>
00030
00031
00032
00033
00034
00035
00036 mpcl::system::ISystem::TMachineDependent::
00037 TMachineDependent (void) :
00038 eEndianType (eBigEndian)
00039 {
00040
00041 using std::size_t;
00042
00043 size_t zGuess = 0;
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053 for (register size_t J = 0; ( J < sizeof (size_t) ) ;++J)
00054 {
00055 zGuess |= ((J + 1) << (J * CHAR_BIT));
00056 }
00057
00058 if ( *((const char*) &zGuess) == sizeof (size_t) )
00059 {
00060 eEndianType = eBigEndian;
00061 }
00062 else
00063 {
00064 eEndianType = eLittleEndian;
00065 }
00066
00067 }
00068
00069
00070 long int mpcl::system::ISystem::TMachineDependent::
00071 getEndianIndependentLongInt ( EEndianness eENDIAN_TYPE ,
00072 const unsigned char* pkucSOURCE_BUFFER ,
00073 std::size_t zLENGTH ) const
00074 {
00075
00076 long int liResult = 0;
00077 int iMaxShift = ((zLENGTH - 1) * CHAR_BIT);
00078
00079 if ( eENDIAN_TYPE == eLittleEndian )
00080 {
00081 for (register int J = 0; ( J <= iMaxShift ) ;++pkucSOURCE_BUFFER)
00082 {
00083 liResult += (((long int) *pkucSOURCE_BUFFER) << J);
00084 J += CHAR_BIT;
00085 }
00086 }
00087 else
00088 {
00089 for (register int J = iMaxShift; ( J >= 0 ) ;++pkucSOURCE_BUFFER)
00090 {
00091 liResult += (((long int) *pkucSOURCE_BUFFER) << J);
00092 J -= CHAR_BIT;
00093 }
00094 }
00095 return liResult;
00096
00097 }
00098
00099
00100 std::vector<mpcl::text::TString> mpcl::system::ISystem::
00101 getPathItems (const std::string& rkySOURCE_PATH_COLLECTION) const
00102 {
00103
00104 using std::back_insert_iterator;
00105 using std::vector;
00106 using text::Split;
00107 using text::TString;
00108
00109
00110
00111
00112 typedef
00113 vector<TString>
00114 TStringVector;
00115
00116 TStringVector::iterator I;
00117 TStringVector tPathVector;
00118 const char kcDirSeparator = getDirectorySeparator();
00119
00120
00121
00122
00123 Split ( rkySOURCE_PATH_COLLECTION.begin() ,
00124 rkySOURCE_PATH_COLLECTION.end() ,
00125 getPathSeparator() ,
00126 back_insert_iterator<TStringVector> (tPathVector) );
00127
00128
00129
00130
00131 for (I = tPathVector.begin(); ( I != tPathVector.end() ) ;++I)
00132 {
00133 if ( (*I) [I->length() - 1] != kcDirSeparator )
00134 {
00135 I->append (1, kcDirSeparator);
00136 }
00137 }
00138 return tPathVector;
00139
00140 }