File: snippets.cpp

package info (click to toggle)
libsimpleini 4.17+dfsg-5
  • links: PTS, VCS
  • area: main
  • in suites: bullseye, buster, sid
  • size: 684 kB
  • sloc: cpp: 4,569; makefile: 31
file content (123 lines) | stat: -rw-r--r-- 3,350 bytes parent folder | download
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
// File:    snippets.cpp
// Library: SimpleIni
// Author:  Brodie Thiesfield <code@jellycan.com>
// Source:  http://code.jellycan.com/simpleini/
//
// Snippets that are used on the website

#ifdef _WIN32
# pragma warning(disable: 4786)
#endif

#ifndef _WIN32
# include <unistd.h>
#endif
#include <fstream>

#define SI_SUPPORT_IOSTREAMS
#include "SimpleIni.h"

bool
snippets(
    const char *    a_pszFile,
    bool            a_bIsUtf8,
    bool            a_bUseMultiKey,
    bool            a_bUseMultiLine
    )
{
    // LOADING DATA

    // load from a data file
    CSimpleIniA ini(a_bIsUtf8, a_bUseMultiKey, a_bUseMultiLine);
    SI_Error rc = ini.LoadFile(a_pszFile);
    if (rc < 0) return false;

    // load from a string
    std::string strData;
    rc = ini.LoadData(strData.c_str(), strData.size());
    if (rc < 0) return false;

    // GETTING SECTIONS AND KEYS

    // get all sections
    CSimpleIniA::TNamesDepend sections;
    ini.GetAllSections(sections);

    // get all keys in a section
    CSimpleIniA::TNamesDepend keys;
    ini.GetAllKeys("section-name", keys);

    // GETTING VALUES

    // get the value of a key
    const char * pszValue = ini.GetValue("section-name",
        "key-name", NULL /*default*/);

    // get the value of a key which may have multiple
    // values. If bHasMultipleValues is true, then just
    // one value has been returned
    bool bHasMultipleValues;
    pszValue = ini.GetValue("section-name", "key-name",
        NULL /*default*/, &bHasMultipleValues);

    // get all values of a key with multiple values
    CSimpleIniA::TNamesDepend values;
    ini.GetAllValues("section-name", "key-name", values);

    // sort the values into the original load order
#if defined(_MSC_VER) && _MSC_VER <= 1200
    /** STL of VC6 doesn't allow me to specify my own comparator for list::sort() */
    values.sort();
#else
    values.sort(CSimpleIniA::Entry::LoadOrder());
#endif

    // output all of the items
    CSimpleIniA::TNamesDepend::const_iterator i;
    for (i = values.begin(); i != values.end(); ++i) {
        printf("key-name = '%s'\n", i->pItem);
    }

    // MODIFYING DATA

    // adding a new section
    rc = ini.SetValue("new-section", NULL, NULL);
    if (rc < 0) return false;
    printf("section: %s\n", rc == SI_INSERTED ?
        "inserted" : "updated");

    // adding a new key ("new-section" will be added
    // automatically if it doesn't already exist.
    rc = ini.SetValue("new-section", "new-key", "value");
    if (rc < 0) return false;
    printf("key: %s\n", rc == SI_INSERTED ?
        "inserted" : "updated");

    // changing the value of a key
    rc = ini.SetValue("section", "key", "updated-value");
    if (rc < 0) return false;
    printf("key: %s\n", rc == SI_INSERTED ?
        "inserted" : "updated");

    // DELETING DATA

    // deleting a key from a section. Optionally the entire
    // section may be deleted if it is now empty.
    ini.Delete("section-name", "key-name",
        true /*delete the section if empty*/);

    // deleting an entire section and all keys in it
    ini.Delete("section-name", NULL);

    // SAVING DATA

    // save the data to a string
    rc = ini.Save(strData);
    if (rc < 0) return false;

    // save the data back to the file
    rc = ini.SaveFile(a_pszFile);
    if (rc < 0) return false;

    return true;
}