X-Git-Url: https://git.teslayout.com/public/public/public/?a=blobdiff_plain;f=include%2Fanna%2Fcore%2Ffunctions.hpp;h=164417b126eb7c749deff35647522f274a754fce;hb=5256cb543a9d35b610df19bd227cde977186aef0;hp=f41d281485364fd927d033781337b7cfd44f0914;hpb=4e12ac57e93c052f716a6305ad8fc099c45899d1;p=anna.git diff --git a/include/anna/core/functions.hpp b/include/anna/core/functions.hpp index f41d281..164417b 100644 --- a/include/anna/core/functions.hpp +++ b/include/anna/core/functions.hpp @@ -1,8 +1,8 @@ -// ANNA - Anna is Not 'N' Anymore +// ANNA - Anna is Not Nothingness Anymore // // (c) Copyright 2005-2014 Eduardo Ramos Testillano & Francisco Ruiz Rayo // -// https://bitbucket.org/testillano/anna +// http://redmine.teslayout.com/projects/anna-suite // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions @@ -14,7 +14,7 @@ // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. -// * Neither the name of Google Inc. nor the names of its +// * Neither the name of the copyright holder nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // @@ -117,7 +117,7 @@ struct functions { /* * Indica el número de bits de un entero largo. */ - static const int int64BitSize = sizeof(Integer64) * 8; + static const int int64BitSize = sizeof(S64) * 8; /** \param number Numero a convertir. @@ -141,13 +141,13 @@ struct functions { Devuelve un literal con tel numero convertido a cadena decimal @return Un literal con el numero signo convertido a cadena decimal. */ - static std::string asString(const Integer64 number) throw(); + static std::string asString(const S64 number) throw(); /** Devuelve un literal con tel numero convertido a cadena decimal @return Un literal con el numero signo convertido a cadena decimal. */ - static std::string asString(const Unsigned64 number) throw(); + static std::string asString(const U64 number) throw(); /** \param _bool Booleano a convertir. @@ -195,7 +195,7 @@ struct functions { \param number Numero a convertir. @return Un literal con el numero convertido a cadena decimal. */ - static std::string asText(const char* comment, const Integer64 number) + static std::string asText(const char* comment, const S64 number) throw() { std::string result(comment); return result += asString(number); @@ -258,7 +258,7 @@ struct functions { \param number Numero a convertir. @return Un literal con el numero convertido a cadena hexadecimal. */ - static std::string asHexString(const Integer64 number) throw(); + static std::string asHexString(const S64 number) throw(); /** \param number Numero a convertir. @@ -270,7 +270,7 @@ struct functions { \param number Numero a convertir. @return Un literal con el numero convertido a cadena hexadecimal. */ - static std::string asHexString(const Unsigned64 number) throw() { return asHexString((Integer64) number); } + static std::string asHexString(const U64 number) throw() { return asHexString((S64) number); } /** \param comment Comentario que precede al valor. @@ -288,7 +288,7 @@ struct functions { \param number Numero a convertir. @return Un literal con el numero convertido a cadena decimal. */ - static std::string asHexText(const char* comment, const Integer64 number) + static std::string asHexText(const char* comment, const S64 number) throw() { std::string result(comment); return result += asHexString(number); @@ -336,13 +336,13 @@ struct functions { Calcula la funcion hash de la cadena recibida como parametro. \param str Cadena a la que aplicar la funcion hash. */ - static Integer64 hash(const char* str) throw(); + static S64 hash(const char* str) throw(); /** Calcula la funcion hash de la cadena recibida como parametro. \param str Cadena a la que aplicar la funcion hash. */ - static Integer64 hash(const std::string& str) throw() { return hash(str.c_str()); } + static S64 hash(const std::string& str) throw() { return hash(str.c_str()); } /** Calcula la funcion hash exclusive de la cadena recibida como parametro. @@ -441,7 +441,14 @@ struct functions { */ static Microsecond hardwareClock() throw() { timespec ts; - clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &ts); + //clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &ts); // DONT works (original) + //clock_gettime(CLOCK_THREAD_CPUTIME_ID, &ts); // DONT works + //clock_gettime(CLOCK_MONOTONIC, &ts); // works + // Note that CLOCK_MONOTONIC is subject to discontinuities from system time + // adjustment in Linux. CLOCK_MONOTONIC_RAW was defined to get around this + // (gets hardware time not adjusted by NTP). + clock_gettime(CLOCK_MONOTONIC_RAW, &ts); // works + Microsecond result((Microsecond::type_t)1000000 * ts.tv_sec + ts.tv_nsec / 1000); return result; } @@ -468,7 +475,7 @@ struct functions { Interpreta la cadena recibida como parametro como un entero de 32 bits. \return */ - static Integer64 asInteger64(const char* str) throw(); + static S64 asInteger64(const char* str) throw(); /** Devuelve el identificador de thread desde el que es invocado este metodo. @@ -509,8 +516,8 @@ struct functions { * \param n Valor a estudiar. * \return el número de bits necesarios para representar el valor recibido como parámetro. */ - static int bitsize(const Integer64 n) throw() { - register int aux = n >> intBitSize; + static int bitsize(const S64 n) throw() { + int aux = n >> intBitSize; return (aux != 0) ? (bitsize(aux) + intBitSize) : bitsize((int) n); } @@ -524,7 +531,7 @@ struct functions { * \param bitShift Número de bits a desplazar. * \param n2 Número a combinar con el resultado de la operación (n1 << bitShift). */ - static Integer64 merge(const char* whatis, const int n1, const int n2, const int bitShift) throw(RuntimeException); + static S64 merge(const char* whatis, const int n1, const int n2, const int bitShift) throw(RuntimeException); /** * Calcula el logaritmo en base 2 del número recibo como parámetro. @@ -1033,6 +1040,90 @@ struct functions { */ static std::string socketVectorAsString(const socket_v & socketVector) throw(); + + /** + Endianess of the system + + @result Returns true when the system is little endian, false if big endian + */ + static bool littleEndian() throw(); + + /** + Encodes an integer number with 32 bits over a buffer with at least 4 bytes of length. + @param result Buffer where the number is encoded. + @param n Number to encode. + \return Buffer with the encoded number. + */ + static const char* codeInteger(char* result, const int n) throw(); + + /** + Encodes an integer number with 16 bits over a buffer with at least 2 bytes of length. + @param result Buffer where the number is encoded. + @param n Number to encode. + \return Buffer with the encoded number. + */ + static const char* codeShort(char* result, const short int n) throw(); + + /** + Encodes an integer number with 64 bits over a buffer with at least 8 bytes of length. + @param result Buffer where the number is encoded. + @param n Number to encode. + \return Buffer with the encoded number. + */ + static const char* codeInteger64(char* result, const S64 n) throw(); + + /** + Encodes a floating number with 32 bits (according to the standard IEEE-754) over a buffer with at least 4 bytes of length. + @param result Buffer where the number is encoded. + @param n Number to encode. + \return Buffer with the encoded number. + */ + static const char* codeFloat(char* result, const float n) throw(); + + /** + Encodes a floating number with 64 bits (according to the standard IEEE-754) over a buffer with at least 8 bytes of length. + @param result Buffer where the number is encoded. + @param n Number to encode. + \return Buffer with the encoded number. + */ + static const char* codeDouble(char* result, const double n) throw(); + + /** + Decodes an 32 bits integer number contained in a 4-bytes buffer. + @param data Buffer with the encoded number. + @return Value for the number contained in the buffer. + */ + static int decodeInteger(const char* data) throw(); + + /** + Decodes an 16 bits integer number contained in a 2-bytes buffer. + @param data Buffer with the encoded number. + @return Value for the number contained in the buffer. + */ + static short int decodeShort(const char* data) throw(); + + /** + Decodes an 64 bits integer number contained in a 8-bytes buffer. + @param data Buffer with the encoded number. + @return Value for the number contained in the buffer. + */ + static S64 decodeInteger64(const char* data) throw(); + + /** + Decodes an 32 bits floating number (according to the standard IEEE-754) contained in a 4-bytes buffer. + @param data Buffer with the encoded number. + @return Value for the number contained in the buffer. + */ + static float decodeFloat(const char* data) throw(); + + /** + Decodes an 64 bits floating number (according to the standard IEEE-754) contained in a 8-bytes buffer. + @param data Buffer with the encoded number. + @return Value for the number contained in the buffer. + */ + static double decodeDouble(const char* data) throw(); + + /** * Decodes an ISUP Number (called or calling party number). * @@ -1062,7 +1153,6 @@ struct functions { */ static void codeIsupNumber(const isup_number_t & isupNumber, bool calledOrCalling, std::string & target) throw(RuntimeException); - private: static ExclusiveHash st_stringExclusiveHash; static ExclusiveHash st_string2intExclusiveHash;