/* * Copyright 2003-2009, Haiku, Inc. All Rights Reserved. * Distributed under the terms of the MIT License. * * Authors: * Stefano Ceccherini (stefano.ceccherini@gmail.com) */ #include "InlineInput.h" #include struct clause { int32 start; int32 end; }; InlineInput::InlineInput(BMessenger messenger) : fMessenger(messenger), fActive(false), fSelectionOffset(0), fSelectionLength(0), fNumClauses(0), fClauses(NULL) { } InlineInput::~InlineInput() { ResetClauses(); } const BMessenger * InlineInput::Method() const { return &fMessenger; } const char * InlineInput::String() const { return fString.String(); } void InlineInput::SetString(const char *string) { fString = string; } bool InlineInput::IsActive() const { return fActive; } void InlineInput::SetActive(bool active) { fActive = active; } int32 InlineInput::SelectionLength() const { return fSelectionLength; } void InlineInput::SetSelectionLength(int32 length) { fSelectionLength = length; } int32 InlineInput::SelectionOffset() const { return fSelectionOffset; } void InlineInput::SetSelectionOffset(int32 offset) { fSelectionOffset = offset; } bool InlineInput::AddClause(int32 start, int32 end) { void *newData = realloc(fClauses, (fNumClauses + 1) * sizeof(clause)); if (newData == NULL) return false; fClauses = (clause *)newData; fClauses[fNumClauses].start = start; fClauses[fNumClauses].end = end; fNumClauses++; return true; } bool InlineInput::GetClause(int32 index, int32 *start, int32 *end) const { bool result = false; if (index >= 0 && index < fNumClauses) { result = true; clause *clause = &fClauses[index]; if (start) *start = clause->start; if (end) *end = clause->end; } return result; } int32 InlineInput::CountClauses() const { return fNumClauses; } void InlineInput::ResetClauses() { fNumClauses = 0; free(fClauses); fClauses = NULL; }