mirror of
https://github.com/XTXMarkets/ternfs.git
synced 2026-01-04 10:05:12 -06:00
This is one of the two data model/protocol changes I want to perform before going into production, the other being file atime. Right now the kernel module does not take advantage of this, but it's OK since I tested the rest of the code reasonably and the goal here is to perform the protocol/data changes.
67 lines
2.2 KiB
C++
67 lines
2.2 KiB
C++
#pragma once
|
|
|
|
#include <iostream>
|
|
|
|
///////////////////////////////////
|
|
// Static init for globals
|
|
///////////////////////////////////
|
|
|
|
// Safer alternative to throwing when in static initialization or signal handler
|
|
void dieWithError(const char *err);
|
|
|
|
////////////////////////////////////////////
|
|
// Compiler hints
|
|
////////////////////////////////////////////
|
|
|
|
// BUG NOTICE: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47466
|
|
// --> this kicks in for statements such as unlikely( a && b );
|
|
// --> see assembler generated for t_compiler.cpp
|
|
// --> the unlikely case is favoured by the compiler
|
|
|
|
#define likely(x) __builtin_expect(!!(x), 1)
|
|
#define unlikely(x) __builtin_expect(!!(x), 0)
|
|
|
|
#define PACKED __attribute__((packed))
|
|
#define ALIGNED(n) __attribute__((aligned(n)))
|
|
#define ALWAYS_INLINE __attribute__((always_inline))
|
|
#define NO_INLINE __attribute__((noinline))
|
|
#define FORMAT(n) __attribute__((format(printf,n+1,n+2)))
|
|
#define NORETURN __attribute__((noreturn))
|
|
#define CONST __attribute__((const))
|
|
#define PURE __attribute__((pure))
|
|
#define HOT __attribute__((hot))
|
|
#define COLD __attribute__((cold))
|
|
#define UNUSED __attribute__((unused))
|
|
#define DEPRECATED __attribute__((deprecated))
|
|
#define CHECK_RETURN __attribute__((warn_unused_result))
|
|
|
|
///////////////////////////////////
|
|
// Debugging features
|
|
///////////////////////////////////
|
|
|
|
#define SHORT_FILE (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__)
|
|
|
|
std::ostream& operator<<(std::ostream& out, struct sockaddr_in& addr);
|
|
std::ostream& operator<<(std::ostream& out, struct in_addr& addr);
|
|
|
|
std::ostream& goLangBytesFmt(std::ostream& out, const char* str, size_t len);
|
|
|
|
struct GoLangBytesFmt {
|
|
const char* str;
|
|
size_t len;
|
|
|
|
GoLangBytesFmt(const char* str_, size_t len_) : str(str_), len(len_) {}
|
|
};
|
|
|
|
std::ostream& operator<<(std::ostream& out, const GoLangBytesFmt& bytes);
|
|
|
|
std::ostream& goLangQuotedStringFmt(std::ostream& out, const char* str, size_t len);
|
|
|
|
struct GoLangQuotedStringFmt {
|
|
const char* str;
|
|
size_t len;
|
|
|
|
GoLangQuotedStringFmt(const char* str_, size_t len_) : str(str_), len(len_) {}
|
|
};
|
|
|
|
std::ostream& operator<<(std::ostream& out, const GoLangQuotedStringFmt& bytes); |