/usr/include/root/Reflex/internal/LiteralString.h is in libroot-core-dev 5.34.19+dfsg-1.2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | // @(#)root/reflex:$Id$
// Author: Axel Naumann, 2010
// Copyright CERN, CH-1211 Geneva 23, 2004-2010, All rights reserved.
//
// Permission to use, copy, modify, and distribute this software for any
// purpose is hereby granted without fee, provided that this copyright and
// permissions notice appear in all copies and derivatives.
//
// This software is provided "as is" without express or implied warranty.
#ifndef Reflex_LiteralString
#define Reflex_LiteralString
#include <set>
#include <cstring>
#include <string>
#include "Reflex/Kernel.h"
namespace Reflex {
class RFLX_API LiteralString {
public:
LiteralString(): fLiteral(0), fAllocSize(0) {}
LiteralString(const char* s);
LiteralString(const LiteralString& other);
~LiteralString();
static void Add(const char* s);
static void Remove(const char* s);
LiteralString& operator=(const LiteralString& other);
const char* c_str() const { return fLiteral; }
const char** key() const { return const_cast<const char**>(&fLiteral); }
size_t length() const { return strlen(fLiteral); }
void erase(size_t i);
void ToHeap();
bool IsLiteral() const { return !fAllocSize; }
bool operator<(const LiteralString& other) const {
return strcmp(fLiteral, other.fLiteral) < 0; }
bool operator>(const LiteralString& other) const {
return strcmp(fLiteral, other.fLiteral) > 0; }
bool operator==(const LiteralString& other) const {
return strcmp(fLiteral, other.fLiteral) == 0; }
bool operator!=(const LiteralString& other) const {
return strcmp(fLiteral, other.fLiteral) != 0; }
bool operator<(const char* other) const {
return strcmp(fLiteral, other) < 0; }
bool operator>(const char* other) const {
return strcmp(fLiteral, other) > 0; }
bool operator==(const char* other) const {
return strcmp(fLiteral, other) == 0; }
bool operator!=(const char* other) const {
return strcmp(fLiteral, other) != 0; }
bool operator<(const std::string& other) const {
return other.compare(fLiteral) < 0; }
bool operator>(const std::string& other) const {
return other.compare(fLiteral) > 0; }
bool operator==(const std::string& other) const {
return other.compare(fLiteral) == 0; }
bool operator!=(const std::string& other) const {
return other.compare(fLiteral) != 0; }
LiteralString& operator+=(const LiteralString& other);
LiteralString& operator+=(const std::string& other);
LiteralString& operator+=(const char* other);
char operator[](size_t i) const { return fBuf[i]; }
// operator const std::string&()
private:
void Reserve(size_t size);
void StrDup(const char* s);
void StrCat(const char* s);
union {
const char* fLiteral;
char* fBuf;
};
size_t fAllocSize;
};
}
#endif // Reflex_LiteralString
|