Skip to content

Commit

Permalink
Utilities for string manipulation (mainly inserting tabs)
Browse files Browse the repository at this point in the history
  • Loading branch information
austinschneider committed Sep 14, 2024
1 parent b778030 commit e3348fc
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 0 deletions.
1 change: 1 addition & 0 deletions projects/utilities/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
LIST (APPEND utilities_SOURCES
${PROJECT_SOURCE_DIR}/projects/utilities/private/Interpolator.cxx
${PROJECT_SOURCE_DIR}/projects/utilities/private/Random.cxx
${PROJECT_SOURCE_DIR}/projects/utilities/private/StringManipulation.cxx
)
add_library(SIREN_utilities OBJECT ${utilities_SOURCES})
set_property(TARGET SIREN_utilities PROPERTY POSITION_INDEPENDENT_CODE ON)
Expand Down
41 changes: 41 additions & 0 deletions projects/utilities/private/StringManipulation.cxx
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
#include <string>
#include <vector>
#include <sstream>

#include "SIREN/utilities/StringManipulation.h"

namespace siren {
namespace utilities {

std::string add_prefix(std::string const & input, std::string const & prefix) {
std::istringstream iss(input);
std::vector<std::string> lines;
std::string line;
ssize_t last_non_empty_line = -1;
size_t line_number = 0;

// Read each line and track the last non-empty line
while (std::getline(iss, line)) {
lines.push_back(line);
if (!line.empty()) {
last_non_empty_line = line_number;
}
line_number++;
}

std::ostringstream oss;

// Add prefix to each line up to the last non-empty line
if (last_non_empty_line >= 0) {
for (size_t i = 0; i <= static_cast<size_t>(last_non_empty_line); ++i) {
oss << prefix << lines[i] << '\n';
}
// Ensure the string ends with an empty newline
oss << '\n';
}

return oss.str();
}

} // namespace utilities
} // namespace siren
17 changes: 17 additions & 0 deletions projects/utilities/public/SIREN/utilities/StringManipulation.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#pragma once
#ifndef SIREN_StringMapulation_H
#define SIREN_StringMapulation_H

#include <string>

namespace siren {
namespace utilities {

constexpr char const * tab = " ";

std::string add_prefix(std::string const & input, std::string const & prefix);

} // namespace utilities
} // namespace siren

#endif // SIREN_StringMapulation_H

0 comments on commit e3348fc

Please sign in to comment.