You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							74 lines
						
					
					
						
							2.7 KiB
						
					
					
				
			
		
		
	
	
							74 lines
						
					
					
						
							2.7 KiB
						
					
					
				#pragma once
 | 
						|
 | 
						|
#include <atomic>
 | 
						|
#include <deque>
 | 
						|
#include <functional>
 | 
						|
#include <sstream>
 | 
						|
#include <string>
 | 
						|
#include <string_view>
 | 
						|
#include <vector>
 | 
						|
#include "cereal/messaging/messaging.h"
 | 
						|
 | 
						|
enum CameraType {
 | 
						|
  RoadCam = 0,
 | 
						|
  DriverCam,
 | 
						|
  WideRoadCam
 | 
						|
};
 | 
						|
 | 
						|
enum class ReplyMsgType {
 | 
						|
  Info,
 | 
						|
  Debug,
 | 
						|
  Warning,
 | 
						|
  Critical
 | 
						|
};
 | 
						|
 | 
						|
typedef std::function<void(ReplyMsgType type, const std::string msg)> ReplayMessageHandler;
 | 
						|
void installMessageHandler(ReplayMessageHandler);
 | 
						|
void logMessage(ReplyMsgType type, const char* fmt, ...);
 | 
						|
 | 
						|
#define rInfo(fmt, ...) ::logMessage(ReplyMsgType::Info, fmt,  ## __VA_ARGS__)
 | 
						|
#define rDebug(fmt, ...) ::logMessage(ReplyMsgType::Debug, fmt,  ## __VA_ARGS__)
 | 
						|
#define rWarning(fmt, ...) ::logMessage(ReplyMsgType::Warning, fmt,  ## __VA_ARGS__)
 | 
						|
#define rError(fmt, ...) ::logMessage(ReplyMsgType::Critical , fmt,  ## __VA_ARGS__)
 | 
						|
 | 
						|
class MonotonicBuffer {
 | 
						|
public:
 | 
						|
  MonotonicBuffer(size_t initial_size) : next_buffer_size(initial_size) {}
 | 
						|
  ~MonotonicBuffer();
 | 
						|
  void *allocate(size_t bytes, size_t alignment = 16ul);
 | 
						|
  void deallocate(void *p) {}
 | 
						|
 | 
						|
private:
 | 
						|
  void *current_buf = nullptr;
 | 
						|
  size_t next_buffer_size = 0;
 | 
						|
  size_t available = 0;
 | 
						|
  std::deque<void *> buffers;
 | 
						|
  static constexpr float growth_factor = 1.5;
 | 
						|
};
 | 
						|
 | 
						|
std::string sha256(const std::string &str);
 | 
						|
void precise_nano_sleep(int64_t nanoseconds, std::atomic<bool> &interrupt_requested);
 | 
						|
std::string decompressBZ2(const std::string &in, std::atomic<bool> *abort = nullptr);
 | 
						|
std::string decompressBZ2(const std::byte *in, size_t in_size, std::atomic<bool> *abort = nullptr);
 | 
						|
std::string decompressZST(const std::string &in, std::atomic<bool> *abort = nullptr);
 | 
						|
std::string decompressZST(const std::byte *in, size_t in_size, std::atomic<bool> *abort = nullptr);
 | 
						|
std::string getUrlWithoutQuery(const std::string &url);
 | 
						|
size_t getRemoteFileSize(const std::string &url, std::atomic<bool> *abort = nullptr);
 | 
						|
std::string httpGet(const std::string &url, size_t chunk_size = 0, std::atomic<bool> *abort = nullptr);
 | 
						|
 | 
						|
typedef std::function<void(uint64_t cur, uint64_t total, bool success)> DownloadProgressHandler;
 | 
						|
void installDownloadProgressHandler(DownloadProgressHandler);
 | 
						|
bool httpDownload(const std::string &url, const std::string &file, size_t chunk_size = 0, std::atomic<bool> *abort = nullptr);
 | 
						|
std::string formattedDataSize(size_t size);
 | 
						|
std::string extractFileName(const std::string& file);
 | 
						|
std::vector<std::string> split(std::string_view source, char delimiter);
 | 
						|
 | 
						|
template <typename Iterable>
 | 
						|
std::string join(const Iterable& elements, const std::string& separator) {
 | 
						|
  std::ostringstream oss;
 | 
						|
  for (auto it = elements.begin(); it != elements.end(); ++it) {
 | 
						|
    if (it != elements.begin()) oss << separator;
 | 
						|
    oss << *it;
 | 
						|
  }
 | 
						|
  return oss.str();
 | 
						|
}
 | 
						|
 |