/*
 * QString Module
 *
 * Copyright (C) 2009 Red Hat Inc.
 *
 * Authors:
 *  Luiz Capitulino <lcapitulino@redhat.com>
 *
 * This work is licensed under the terms of the GNU LGPL, version 2.1 or later.
 * See the COPYING.LIB file in the top-level directory.
 */

#ifndef QSTRING_H
#define QSTRING_H

#include "qobject/qobject.h"

struct QString {
    struct QObjectBase_ base;
    const char *string;
};

void qstring_unref(QString *q);

G_DEFINE_AUTOPTR_CLEANUP_FUNC(QString, qstring_unref)

QString *qstring_new(void);
QString *qstring_from_str(const char *str);
QString *qstring_from_substr(const char *str, size_t start, size_t end);
QString *qstring_from_gstring(GString *gstr);
const char *qstring_get_str(const QString *qstring);

#endif /* QSTRING_H */
