File: yaml_writer.cpp

package info (click to toggle)
lammps 20210122~gita77bb%2Bds1-2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 331,996 kB
  • sloc: cpp: 802,213; python: 24,256; xml: 14,949; f90: 10,448; ansic: 8,476; perl: 4,161; sh: 3,466; fortran: 2,805; makefile: 1,250; objc: 238; lisp: 163; csh: 16; awk: 14; tcl: 6
file content (113 lines) | stat: -rw-r--r-- 4,683 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
/* ----------------------------------------------------------------------
   LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
   https://lammps.sandia.gov/, Sandia National Laboratories
   Steve Plimpton, sjplimp@sandia.gov

   Copyright (2003) Sandia Corporation.  Under the terms of Contract
   DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
   certain rights in this software.  This software is distributed under
   the GNU General Public License.

   See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */

#include "yaml_writer.h"
#include "yaml.h"

#include <cstdio>
#include <string>

YamlWriter::YamlWriter(const char *outfile)
{
    yaml_emitter_initialize(&emitter);
    fp = fopen(outfile, "w");
    if (!fp) {
        perror(__FILE__);
        return;
    }

    yaml_emitter_set_output_file(&emitter, fp);

    yaml_stream_start_event_initialize(&event, YAML_UTF8_ENCODING);
    yaml_emitter_emit(&emitter, &event);
    yaml_document_start_event_initialize(&event, NULL, NULL, NULL, 0);
    yaml_emitter_emit(&emitter, &event);
    yaml_mapping_start_event_initialize(&event, NULL, (yaml_char_t *)YAML_MAP_TAG, 1,
                                        YAML_ANY_MAPPING_STYLE);
    yaml_emitter_emit(&emitter, &event);
}

YamlWriter::~YamlWriter()
{
    yaml_mapping_end_event_initialize(&event);
    yaml_emitter_emit(&emitter, &event);
    yaml_document_end_event_initialize(&event, 0);
    yaml_emitter_emit(&emitter, &event);
    yaml_stream_end_event_initialize(&event);
    yaml_emitter_emit(&emitter, &event);
    yaml_emitter_delete(&emitter);
    fclose(fp);
}

void YamlWriter::emit(const std::string &key, const double value)
{
    yaml_scalar_event_initialize(&event, NULL, (yaml_char_t *)YAML_STR_TAG,
                                 (yaml_char_t *)key.c_str(), key.size(), 1, 0,
                                 YAML_PLAIN_SCALAR_STYLE);
    yaml_emitter_emit(&emitter, &event);
    char buf[256];
    snprintf(buf, 256, "%.15g", value);
    yaml_scalar_event_initialize(&event, NULL, (yaml_char_t *)YAML_STR_TAG, (yaml_char_t *)buf,
                                 strlen(buf), 1, 0, YAML_PLAIN_SCALAR_STYLE);
    yaml_emitter_emit(&emitter, &event);
}

void YamlWriter::emit(const std::string &key, const long value)
{
    yaml_scalar_event_initialize(&event, NULL, (yaml_char_t *)YAML_STR_TAG,
                                 (yaml_char_t *)key.c_str(), key.size(), 1, 0,
                                 YAML_PLAIN_SCALAR_STYLE);
    yaml_emitter_emit(&emitter, &event);
    char buf[256];
    snprintf(buf, 256, "%ld", value);
    yaml_scalar_event_initialize(&event, NULL, (yaml_char_t *)YAML_STR_TAG, (yaml_char_t *)buf,
                                 strlen(buf), 1, 0, YAML_PLAIN_SCALAR_STYLE);
    yaml_emitter_emit(&emitter, &event);
}

void YamlWriter::emit(const std::string &key, const int value)
{
    yaml_scalar_event_initialize(&event, NULL, (yaml_char_t *)YAML_STR_TAG,
                                 (yaml_char_t *)key.c_str(), key.size(), 1, 0,
                                 YAML_PLAIN_SCALAR_STYLE);
    yaml_emitter_emit(&emitter, &event);
    char buf[256];
    snprintf(buf, 256, "%d", value);
    yaml_scalar_event_initialize(&event, NULL, (yaml_char_t *)YAML_STR_TAG, (yaml_char_t *)buf,
                                 strlen(buf), 1, 0, YAML_PLAIN_SCALAR_STYLE);
    yaml_emitter_emit(&emitter, &event);
}

void YamlWriter::emit(const std::string &key, const std::string &value)
{
    yaml_scalar_event_initialize(&event, NULL, (yaml_char_t *)YAML_STR_TAG,
                                 (yaml_char_t *)key.c_str(), key.size(), 1, 0,
                                 YAML_PLAIN_SCALAR_STYLE);
    yaml_emitter_emit(&emitter, &event);
    yaml_scalar_event_initialize(&event, NULL, (yaml_char_t *)YAML_STR_TAG,
                                 (yaml_char_t *)value.c_str(), value.size(), 1, 0,
                                 YAML_PLAIN_SCALAR_STYLE);
    yaml_emitter_emit(&emitter, &event);
}

void YamlWriter::emit_block(const std::string &key, const std::string &value)
{
    yaml_scalar_event_initialize(&event, NULL, (yaml_char_t *)YAML_STR_TAG,
                                 (yaml_char_t *)key.c_str(), key.size(), 1, 0,
                                 YAML_PLAIN_SCALAR_STYLE);
    yaml_emitter_emit(&emitter, &event);
    yaml_scalar_event_initialize(&event, NULL, (yaml_char_t *)YAML_STR_TAG,
                                 (yaml_char_t *)value.c_str(), value.size(), 1, 0,
                                 YAML_LITERAL_SCALAR_STYLE);
    yaml_emitter_emit(&emitter, &event);
}