template <class T>
void MoveFromBinaryFormat(T& data, const char*& p) {
- data = *reinterpret_cast<const T*>(p);
+ static_assert(std::is_standard_layout<T>::value, "not standard layout");
+ memcpy(&data, p, sizeof(T));
p += sizeof(T);
}
+template <class T>
+void MoveFromBinaryFormat(T* data_p, size_t n, const char*& p) {
+ static_assert(std::is_standard_layout<T>::value, "not standard layout");
+ size_t size = n * sizeof(T);
+ memcpy(data_p, p, size);
+ p += size;
+}
+
+template <class T>
+void MoveToBinaryFormat(const T& data, char*& p) {
+ static_assert(std::is_standard_layout<T>::value, "not standard layout");
+ memcpy(p, &data, sizeof(T));
+ p += sizeof(T);
+}
+
+template <class T>
+void MoveToBinaryFormat(const T* data_p, size_t n, char*& p) {
+ static_assert(std::is_standard_layout<T>::value, "not standard layout");
+ size_t size = n * sizeof(T);
+ memcpy(p, data_p, size);
+ p += size;
+}
+
void PrintIndented(size_t indent, const char* fmt, ...);
void FprintIndented(FILE* fp, size_t indent, const char* fmt, ...);
bool IsPowerOfTwo(uint64_t value);
-void GetEntriesInDir(const std::string& dirpath, std::vector<std::string>* files,
- std::vector<std::string>* subdirs);
+std::vector<std::string> GetEntriesInDir(const std::string& dirpath);
+std::vector<std::string> GetSubDirs(const std::string& dirpath);
bool IsDir(const std::string& dirpath);
bool IsRegularFile(const std::string& filename);
uint64_t GetFileSize(const std::string& filename);
timeval SecondToTimeval(double time_in_sec);
+std::string GetSimpleperfVersion();
+
#endif // SIMPLE_PERF_UTILS_H_