OSDN Git Service

Merge "libf2fs_sparseblock: Android.mk->Android.bp"
[android-x86/system-extras.git] / simpleperf / utils.h
index d2ed94d..775fd5c 100644 (file)
@@ -107,17 +107,41 @@ class ArchiveHelper {
 
 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);
@@ -145,4 +169,6 @@ uint64_t ConvertBytesToValue(const char* bytes, uint32_t size);
 
 timeval SecondToTimeval(double time_in_sec);
 
+std::string GetSimpleperfVersion();
+
 #endif  // SIMPLE_PERF_UTILS_H_