⛏️ index : haiku.git

/*
 * Copyright 2008-2009, Ingo Weinhold, ingo_weinhold@gmx.de.
 * Distributed under the terms of the MIT license.
 */
#ifndef UTILITIES_H
#define UTILITIES_H

#include <stdarg.h>

#include <InterfaceDefs.h>
#include <String.h>


class BMessage;


#define COPYRIGHT_STRING "Copyright " B_UTF8_COPYRIGHT " "


BString trim_string(const char* string, size_t len);
	// Removes leading and trailing white space and replaces all sequences
	// of white space by a single space.

void parse_named_url(const BString& namedURL, BString& name, BString& url);


class StringVector {
public:
								StringVector();
	explicit					StringVector(const char* string,...);
									// NULL terminated list
								StringVector(const BMessage& strings,
									const char* fieldName);
										// all elements of the given field
								StringVector(const StringVector& other);
								~StringVector();

			bool				IsEmpty() const			{ return fCount == 0; }
			int32				CountStrings() const	{ return fCount; }
			const char*			StringAt(int32 index) const;

			void				SetTo(const char* string,...);
			void				SetTo(const char* string, va_list strings);
			void				SetTo(const BMessage& strings,
									const char* fieldName,
									const char* prefix = NULL);
			void				Unset();


private:
			BString*			fStrings;
			int32				fCount;
};


class PackageCredit {
public:
								PackageCredit(const char* packageName);
								PackageCredit(
									const BMessage& packageDescription);
								PackageCredit(const PackageCredit& other);
								~PackageCredit();

			bool				IsValid() const;

			bool				IsBetterThan(const PackageCredit& other) const;

			PackageCredit&		SetCopyrights(const char* copyright,...);
			PackageCredit&		SetCopyright(const char* copyright);
			PackageCredit&		SetLicenses(const char* license,...);
			PackageCredit&		SetLicense(const char* license);
			PackageCredit&		SetSources(const char* source,...);
			PackageCredit&		SetSource(const char* source);
			PackageCredit&		SetURL(const char* url);

			const char*			PackageName() const;

			const StringVector&	Copyrights() const;
			int32				CountCopyrights() const;
			const char*			CopyrightAt(int32 index) const;

			const StringVector&	Licenses() const;
			int32				CountLicenses() const;
			const char*			LicenseAt(int32 index) const;

			const StringVector& Sources() const;
			int32				CountSources() const;
			const char*			SourceAt(int32 index) const;

			const char*			URL() const;

	static	bool				NameLessInsensitive(const PackageCredit* a,
									const PackageCredit* b);

private:
			int					_MaxCopyrightYear() const;

private:
			BString				fPackageName;
			StringVector		fCopyrights;
			StringVector		fLicenses;
			StringVector		fSources;
			BString				fURL;
};


#endif	// UTILITIES_H