Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "fmt"
- "time"
- )
- type Information struct {
- Name string // name or description
- Date time.Time // deadline (or limit time)
- }
- func (info *Information) String() string {
- return fmt.Sprintf("[%s] %s", info.Date.Format("2006-01-02 15:04"), info.Name)
- }
- type Task struct {
- Info Information
- Subtasks []Information
- }
- func NewTask(info *Information) *Task {
- return &Task{
- Info: *info,
- }
- }
- func (t *Task) AddSubtask(info *Information) {
- if t.Subtasks == nil {
- t.Subtasks = make([]Information, 0, 1)
- }
- t.Subtasks = append(t.Subtasks, *info)
- }
- // removeSubtaskはタスクを削除する。
- // このメソッドは境界をチェックしないので直接呼び出さない。
- func (t *Task) removeSubtask(i int) bool {
- l := len(t.Subtasks)
- t.Subtasks = append((t.Subtasks)[0:i], (t.Subtasks)[i+1:l]...)
- return true
- }
- func (t *Task) String() string {
- var str string
- str += t.Info.String()
- for i, s := range t.Subtasks {
- str += fmt.Sprintf("\n\t%3d: %s", i+1, s.String())
- }
- return str
- }
- type TaskList []Task
- func (tl *TaskList) AddTask(t *Task) {
- if *tl == nil {
- *tl = make(TaskList, 0, 1)
- }
- *tl = append(*tl, *t)
- }
- // removeTaskはタスクを削除する。
- // このメソッドは境界をチェックしないので直接呼び出さない。
- func (tl *TaskList) removeTask(i int) bool {
- l := len(*tl)
- *tl = append((*tl)[0:i], (*tl)[i+1:l]...)
- return true
- }
- // RemoveItemはタスクまたはサブタスクを削除する。
- // removeTask, removeSubtaskは境界をチェックしない安全でないメソッドなので
- // これらを直接呼ばずにRemoveItemを使うこと。
- func (tl *TaskList) RemoveItem(mainNum, subNum int) bool {
- if subNum == 0 {
- return tl.removeTask(mainNum - 1)
- }
- if mainNum < 1 || mainNum > len(*tl) {
- return false
- }
- return (*tl)[mainNum-1].removeSubtask(subNum - 1)
- }
- func (tl *TaskList) String() string {
- var str string
- sep := ""
- for i, t := range *tl {
- str += fmt.Sprintf("%s%3d: %s", sep, i+1, t.String())
- sep = "\n"
- }
- return str
- }
- func main() {
- var tasks TaskList
- tasks.AddTask(NewTask(&Information{Name: "Main Task 1", Date: time.Now()}))
- tasks.AddTask(NewTask(&Information{Name: "Main Task 2", Date: time.Now()}))
- tasks.AddTask(NewTask(&Information{Name: "Main Task 3", Date: time.Now()}))
- tasks[0].AddSubtask(&Information{Name: "Sub Task 1", Date: time.Now()})
- tasks[1].AddSubtask(&Information{Name: "Sub Task 1", Date: time.Now()})
- tasks[1].AddSubtask(&Information{Name: "Sub Task 2", Date: time.Now()})
- tasks[2].AddSubtask(&Information{Name: "Sub Task 1", Date: time.Now()})
- fmt.Println(&tasks)
- tasks.RemoveItem(2, 1)
- fmt.Println("============================================================")
- fmt.Println(&tasks)
- tasks.RemoveItem(2, 0)
- fmt.Println("============================================================")
- fmt.Println(&tasks)
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement